精华内容
下载资源
问答
  • python函数调用

    千次阅读 2018-06-22 04:18:38
    python函数要先定义,然后才能调用,也就是说在python代码中要先将函数定义,然后才能是主程序。
    python函数要先定义,然后才能调用,也就是说在python代码中要先将函数定义,然后才能是主程序。
    展开全文
  • 函数是 “ 一系列命令的集合”,我们可以通过调用函数来自动执行某一系列命令。虽然经常性地出现于文章中的print()是被录入在Python的标准库中的函数,但是,程序员亦可创建自己的函数。如果想要定义函数,则需要以...

    b90ab924007d52979ec9ed86286fefda.png

    函数是 “ 一系列命令的集合”,我们可以通过调用函数来自动执行某一系列命令。虽然经常性地出现于文章中的print()是被录入在Python的标准库中的函数,但是,程序员亦可创建自己的函数。如果想要定义函数,则需要以“def 函数名():”的格式为开头编写代码。在这之下的一个模块就是一个函数的范围。Python的模块就如前文中提到的,是根据缩进的等级来进行区分的。同时,对于函数也需要设定参数,函数可以根据参数的值来执 行各种指令。在Python中,可以通过使用列表或者双精度浮点型变量来灵活指定参数。同时,也可以将函数运行的结果作为返回值返回。 函数可以多次调用。所以,如果设计出出色的函数,那么在编写复杂的程序时可 以将行文简洁地记述出来。

    函数的定义

    1

    所谓函数?

    函数就是对程序给出的值按照既定的处理指令执行命令并将结果返回的黑箱。

    其中函数所处 理的值被称为参数、函数所返回的结果的值被称为返回值。

    48b106a2278facfa766771c300a267fe.png

    2

    函数的定义

    将上文中的函数按Python的方式记述,则会变为如下格式。像这样将函数的功能记述出来的方式被称为定义函数。

    f2daa6b90a9b2007294c0bebde0bdb2c.png

    参数在不必要的时候可以省略

    c6585c19c26a54ec60fdc42ea6f545a7.png

    如果要做一个什么命令都不执行的函数,则用pass。

    36555f09aa48e8539ada42460c1306ab.png

    函数的调用

    1

    调用的基本形式 (位置参数)

    函数可以用如下的方式调用。在调用时使用的参数被称为实参,从原则上说要引入和定义时 所指定的参数个数一样的数量。

    d575b8d821a8b9d90150c1697527c255.png

    如果是不具备参数的函数,则是以下格式。

    ac99e7b4f69e6208d2f6a29513b8b5d1.png

    2

    使用了关键字的参数指定 (关键参数)

    可以通过使用伪参数的名字来指定其对应的实参。

    95a46cac30152d49e021f446ed78a22f.png

    918f6e273ed3712beba1f12e537d6dd0.png

    参数的全局调用

    介绍利用双精度浮点型变量或者字典的特点实现参数的全局调用。 

    1

    将参数赋值到双精度浮点型变量中的方法

    在伪参数前面添加*就可以使参数被赋值到双精度浮点型变量中。

    39155ba3e84516405e27f0992432143b.png

    顺便说一下,这个avg函数可以通过利用数学函数中的sum()更简洁地书写。

    a25fe275314f08b40f77a83137e0d0d6.png

    2

    使用字典接收参数的方法

    将关键参数作为字典接收 

    在伪参数之前加上**就可以将关键参数作为字典来接收。

    46f1cd35b861b77310c33ecacd08fd54.png

    ≫将字典展开并接收 

    将参数作为字典传递,若想将传递出去的字典在函数侧展开后接收参数的话,需要在调用侧 的参数前添加 **。

    9fa55ad14cc14e8d6d97e18f7272eb7b.png

    函数的使用技巧

    1

    默认函数

    可以给参数规定一个默认值的函数,指定了默认值的函数在被调用时,参数可以省略。

    5c5da4ad0804b0ad5e7ea153132bceca.png

    默认参数可以从右侧的参数开始设置多个,但是不可以将中间的某个参数作为默认参数。

    8cd0cd289334cf8231c99a5c48d6e815.png

    2

    函数对象

    在函数名的末尾不添加(),只写名称的格式所表示的是函数本身。我们将其称之为函数对象, 可以像值一样将其代入到变量中去。

    93660265da0530c48a4d148474481f61.png

    3

    函数的嵌套

    我们可以定义函数中的函数。内部的函数被称为本地函数,只可以在特定的函数中被使用的 函数都可以被认为是本地函数。

    e905f55a9edc21d147e948330b536f3d.png

    无名函数

    1

    什么是无名函数

    如果是进行一些简单的处理的函数,可以使用关键字“lambda”来记述,这种写法可以被称 作无名函数(lambda函数)。

    a8da2d08db60974894d2efa4d6a45eae.png

    2

    回调函数和无名函数

    函数可以将别的函数作为参数使用,被作为参数使用的函数被称为回调函数。

    16c41ab67ca8fbca42f8048213556406.png

    回调函数的优点是可以在调用的时候决定其处理的内容。不过,这样就需要定义一个只针对 这一目的的特殊函数。所以,这个时候使用无名函数的话,可以简化这个记述过程。

    a30a6db0bae014ba3ee0a9bb71d623a5.png

    变量范围

    1

    本地变量和全局变量

    在函数内部使用的变量为本地变量,本地变量只在函数内部有效。与之相对,在函数外部使 用的变量为全局变量,全局变量可以在任意函数中调用。

    e3cfd642978c2e74aa431b0ef7ad52ec.png

    在函数被用于嵌套中时,只在其每一单次的函数调用内有效。

    3931a4c00c8227c66b3a66f443b43f60.png

    2

    非本地变量的更改

    在函数中想要改变其外部的变量的时候需要注意几个要素,像下图那样简单地记述代入命令 是无法改变外部变量的。

    930913bc8f5b2e276a15134b8ccf797e.png

    如果想要更改函数外部的变量的话,需要使用global或者nonlocal命令来声明变量并非本 地变量。

    a05bbab81d969c433410a80b21094d62.png

    生成器(generator)

    1

    什么是生成器?

    生成器是函数的一种。通常,函数只会返回固定的数值,但是如果使用了生成器,便会随着 调用次数的不同,返回不同的数值。

    130c01df663ada0a283435b69269ff3d.png

    如果想要使用生成器的话,需要以下几个步骤:1.需要定义生成器函数;2.需要调用生成器函 数并且初始化;3.将生成器对象作为参数调用next()函数。下文是以0、1、2、3、4的数值 作为顺序输出的范例。

    1219a0cb63b81fc8e6322a9a8190fa88.png

    2

    使用了生成器推导式的书写格式

    前一页所提到的生成器的定义和初始化可以通过利用推导式将其记述成如下简洁形式,这个 形式就是生成器推导式。

    1432992900252fa057dd6f0b1e68be4b.png

    如果是记述成以下的格式,t将不再是生成器,而是[0,1,2,3,4]这样的一个列表。

    62b2e1ec2d921385ef605ff97a8523c9.png

    3

    值的传递

    生成器除了可以被生成,也可以通过使用send()这个方法将值传递出去。

    f4368d2b25d3318e75b7fcf051863dc4.png

    4

    样本程序

    ●显示日历 指定公历年份和月份,并显示相应的日历

    ab33b6cf0405c4484b904a7173fe20da.png

    e41661af9bba71020ec175e4a9275115.png

    ce29ff8b16c0417a725e99c5ab254279.png

    a19eb33d326297931d5a23b51bf74045.png

    以上内容来自《图解Python》

    8305424a5bf5986fa7e1ee806c42b79e.png趣谈编程

    关注我,让你轻松学编程

    e89946010a5ba37e6490791e9705aceb.png

    展开全文
  • 通过阅读您的评论,您的实际问题似乎是:您有一个方法可以打印一些输出。如果用户调用代码,那么您...在另一种方法是在函数调用期间创建一个函数包装器来重定向stdout,然后再恢复它。像这样:import osimport sysd...

    通过阅读您的评论,您的实际问题似乎是:您有一个方法可以打印一些输出。如果用户调用代码,那么您希望将输出打印到终端。如果代码由另一个方法在内部调用,则不希望输出被打印。在

    @mgilson建议的debug参数是一个不错的选择,但是您希望用户不知道这个选项,无论出于什么原因。在

    另一种方法是在函数调用期间创建一个函数包装器来重定向stdout,然后再恢复它。像这样:import os

    import sys

    def suppress_print(f, *args, **kwargs):

    """Call the function f, but print to the null device

    instead of the screen."""

    old_stdout = sys.stdout

    sys.stdout = open(os.devnull, 'w')

    result = f(*args, **kwargs)

    sys.stdout = old_stdout

    return result

    class Foo:

    def bar(self):

    print "This is a test."

    return 42

    def baz(self):

    return suppress_print(self.bar)

    foo = Foo()

    # this should print to the terminal

    foo.bar()

    # this shouldn't

    foo.baz()

    然后,无论何时在内部调用函数,都要用suppress_print对其进行包装,输出将被压缩。请注意,这实际上是一个使用上下文管理器的好地方,但我将把它作为进一步的练习。。。在

    展开全文
  • 关于C++调用python函数的配置,在前两篇博客中已有介绍: C++调用Python函数(一)——配置及测试 C++调用Python函数(二)——调用函数并输出返回值 最近做OCR字符识别方面的工作,想通过讯飞的接口进行OCR识别...

    关于C++调用python函数的配置,在前两篇博客中已有介绍:
    C++调用Python函数(一)——配置及测试
    C++调用Python函数(二)——调用函数并输出返回值

    最近做OCR字符识别方面的工作,想通过讯飞的接口进行OCR识别,前面的算法预处理,分图等工作是用C++完成的,但是用C++调用讯飞接口比较困难,于是想利用C++调用Python函数去调用讯飞接口。

    一丶Python调用讯飞OCR接口函数

    这里写图片描述

    到讯飞开放平台进行注册,日免费次数500次
    讯飞开放平台
    获取自己的APIID和apiKey

    import time
    import urllib
    import json
    import hashlib
    import base64
    from urllib import parse,request
    
    def main(filepath):
        f = open(filepath, 'rb')#图片存放位置
        file_content = f.read()
        base64_image = base64.b64encode(file_content)
        body = urllib.parse.urlencode({'image': base64_image})  # body数据
        body = bytes(body, 'utf-8')
        url = 'http://webapi.xfyun.cn/v1/service/v1/ocr/handwriting'
        api_key = 'xxxxxxxxxxxxxxxxxxxxxxxx'#申请的apiKey
        param = {"language":"en", "location":"false"}  # header中参数
        param_json = json.dumps(param).replace(' ', '')#字符串类型
        x_appid = 'XXXXXXXX'#讯飞的APIID,自己申请的
        param1=bytes(param_json,'utf-8')
        #pdb.set_trace()
        x_param = base64.b64encode(param1)
        x_param_decode = x_param.decode('utf-8')
        x_time = int(int(round(time.time() * 1000)) / 1000)
        text = api_key + str(x_time) + x_param_decode
        text = bytes(text, 'utf-8')
        x_checksum = hashlib.md5(text).hexdigest()
        x_header = {'X-Appid': x_appid,
                    'X-CurTime': x_time,
                    'X-Param': x_param,
                    'X-CheckSum': x_checksum}
        req = urllib.request.Request(url, body, x_header)
        result = urllib.request.urlopen(req)
        result = result.read().decode("utf-8")
        print("讯飞返回结果,内部展示用的" + result)
        return result
    
     if __name__ == '__main__':
        main(r"D:\SuWenbo\Project\xunfei\testfile\cusion.png")
    

    上面的函数已经可以完成输入图片返回识别结果的工作:

    输入图片:

    这里写图片描述
    输出结果:是一个字典,content即为识别结果

    {“code”:”0”,”data”:{“block”:[{“type”:”text”,”line”:[{“confidence”:1,”word”:[{“content”:”see“}]}]}]},”desc”:”success”,”sid”:”wcr0005befd@dx26d00ec5f60f6f1a00”}
    这里写图片描述

    二丶C++调用Python函数实现OCR识别

    我们利用C++调用上面的Python函数实现OCR识别,利用Python的PyObject

    代码如下:

    #include <Python.h>
    #include<iostream>
    #include<string>
    using namespace std;
    
    int main()
    {
    
        Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化
        if (!Py_IsInitialized())
        {
            printf("初始化失败!");
            return 0;
        }
        PyRun_SimpleString("import sys");
        PyRun_SimpleString("sys.path.append('./')");//这一步很重要,修改Python路径
    
    
        PyObject * pModule = NULL;//声明变量
        PyObject * pFunc = NULL;// 声明变量
        pModule = PyImport_ImportModule("hello");//这里是要调用的文件名hello.py
        if (pModule == NULL)
        {
            cout << "没找到" << endl;
        }
        pFunc = PyObject_GetAttrString(pModule, "main");//这里是要调用的函数名
        if (pFunc == NULL)
        {
            cout << "函数没找到" << endl;
        }
    
        PyObject* args = Py_BuildValue("(s)", "D:/SuWenbo/Project/xunfei/testfile/cusion.png");//给python函数参数赋值
    
        PyObject* pRet = PyObject_CallObject(pFunc, args);//调用函数
    
        Py_Finalize();//调用Py_Finalize,这个根Py_Initialize相对应的。
    
        return 0;
    }

    返回结果:
    这里写图片描述

    和Python返回结果一样,可以在上面的python函数里面加上一些截取字符串的操作,然后把content:see截取下来进行保存。

    参考:
    1.讯飞手写字符API

    展开全文
  • python 函数调用问题

    千次阅读 2018-06-15 22:17:11
    本文主要解决python调用其他文件里的函数问题。 先将要调用函数写在一个文件里,以def开头。如: #coding=utf-8 #存储一些常用的图像操作 import os from PIL import Image from numpy import * from pylab ...
  • 由于要重构项目的部分代码,要整理好主要的函数调用关系,不想自己看代码慢慢画出结构,想找出一种通用的,节省人力的方法得出函数间的调用关系图,于是发现以下几个工具。(内网没装好graphviz,还没真正用上) ...
  • python函数调用另外的一个函数

    千次阅读 2020-08-20 17:49:14
    1、使用场景:一个发送短信的函数,一个登陆的函数,登陆前需要调用发送短信 def send_message(ip): """1、发送短信""" url = "http://" + ip + ".123.com/api/sms/send" print(url) params = { "mobile": ...
  • 一、安装相应的python包 graphviz pip install graphviz pycallgraph pip install pycallgraph 二、main函数 # 导入相应的包 from pycallgraph import PyCallGraph from pycallgraph.output import GraphvizOutput...
  • 本文学习Python函数,包括:函数调用 定义函数 函数的参数 递归函数我们知道圆的面积计算公式为:S = π r*r当我们知道半径r的值时,就可以根据公式计算出面积。假设我们需要计算3个不同大小的圆的面积:r1 = 12.34 ...
  • 如何查看Python函数调用图 Ubuntu

    千次阅读 2017-12-07 14:49:42
    说明:有时候想看看Python函数调用图,此时  pycallgraph 就显示出他的用途了。 安装 pycallgraph pip install pycallgraph 安装 graphviz,使用dot -v 验证安装,记得将 /usr/bin/ 设置到 PATH路径 ...
  • C++之python函数调用

    千次阅读 2011-08-26 11:16:36
    代码如下,分别演示直接执行python语句、无返回无参数函数调用、返回单参数函数调用。返回多参数函数调用:    #include  #include  using namespace std;  //执行python命令  void ExecPython
  • 文中通过示例代码介绍的非常详细,下面我们一起来看一下吧。0x 00返回值简介回顾下,上一节简单介绍了函数及其各种参数,...函数需要先定义后调用函数体中return语句的结果就是返回值。如果一个函数没有reutrn语...
  • python函数调用的四种方式

    千次阅读 2017-10-09 10:40:04
    #标准调用 normal_invoke(1, 2) #关键字调用 keyword_invoke(y=1, x=2) #非关键字可变长参数(tuple) normal_tuple_invoke(1, 3, 'xyz', 123.4) #关键字可变长参数(dict) keyword_dict_invoke(y=1, x=2, arg2='def', ...
  • (所以,使用的时候要关注一下你此次调用的“测试覆盖率”,尽可能全面的调用到每一个函数) 生成的图片示例 代码示例 1:在普通python程序中使用 # -*- coding: utf-8 -*- from pycallgraph import Config from ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,711
精华内容 22,284
关键字:

python函数调用

python 订阅