网站首页 > 文章中心 > 其它

python设置回调函数

作者:小编 更新时间:2023-09-05 08:17:02 浏览量:451人看过

Python其实很简单 第十二章 函数与变量的作用域

在前面已经多次提到函数这个概念,之所以没有解释什么是函数,是因为程序中的函数和数学中的函数差不多,如input()、range()等都是函数,这些都是Python的标准函数,直接使用就可以了.根据需要,用户也可以自定义函数.

函数的结构:

def 函数名(参数):

函数体

return 返回值

def f(x):

python设置回调函数-图1

return(y)

下面给出完整的程序代码:

print(res)

运行结果:11

上例中的y是函数f(x)的返回值.并不是所有的函数都有参数和返回值.如下面的函数:

def func():

print('此为无参数传递、无返回值的函数')

func()

输出结果:此为无参数传递、无返回值的函数

可以看出,该函数func()无参数,故调用时不用赋给参数值.

def f(x,y):

return z

也可以通过直接给参数列表中的参数赋值的方法,为参数添加默认值,如果用户赋予参数值,则按照用户赋值执行,否则使用默认值.例如:

回调函数,又称函数回调,是将函数作为另一函数的参数.

例如:

def func(fun,m,n):

fun(m,n)

def f_add(m,n):

print('m+n=',m+n)

def f_mult(m,n):

print('m*n=',m*n)

输出结果:

在f_add(m,n)和f_mult(m,n)被定义前,func(fun,m,n)中的fun(m,n)就已经调用了这两个函数,即"先调用后定义",这也是回调函数的特点.

如果无法预知参数的个数,可以在参数前面加上*号,这种参数实际上对应元组类型.譬如,参会的人数事先不能确定,只能根据与会人员名单输入:

def func(*names):

print('今天与会人员有:')

for name in names:

print(name)

func('张小兵','陈晓梅','李大海','王长江')

运行后,输出结果为:

今天与会人员有:

张小兵

陈晓梅

李大海

王长江

参数为字典类型,需要在参数前面加上**号.

def func(**kwargs):

for i in kwargs:

print(i,kwargs[i])

func(a='a1',b='b1',c='c1')

输出结果为:

a a1

b b1

c c1

一个有趣的实例:

def func(x,y,z,*args,**kwargs):

print(x,y,z)

print(args)

print(kwargs)

func('a','b','c','Python','is easy',py='python',j='java',ph='php')

a b c # 前三个实参赋给前三个形参

('Python', 'is easy') # *args接收元组数据

{'py': 'python', 'j': 'java', 'ph': 'php'} # **kwargs接收字典数据

变量的作用域即变量的有效范围,可分为全局变量和局部变量.

局部变量

在函数中定义的变量就是局部变量,局部变量的作用域仅限于函数内部使用.

全局变量

在主程序中定义的变量就是全局变量,但在函数中用关键字global修饰的变量也可以当做全局变量来使用.

全局变量的作用域是整个程序,也就是说,全局变量可以在整个程序中可以访问.

下面通过实例去讨论:

程序1:

a=1 # a为全局变量

def a_add():

print('a的初值:',a) # 在函数中读取a的值

a_add() # 调用函数a_add()

a+=1 # 主程序语句,a增加1

print('a现在的值是:',a) # 主程序语句,读取a的值

运行结果:

a的初值: 1

这个结果和我们想象的一样,全局变量a既可以在主程序中读取,也可以在子程序(函数)中读取.

a=1

a+=1

print('a的初值:',a)

a_add()

print('a现在的值是:',a)

运行程序1时出现如下错误提示:

UnboundLocalError: local variable 'a' referenced before assignment

意思是:局部变量'a'在赋值之前被引用.

怎样解决这个问题?

def a_add(x):

x+=1

return x

a=a_add(a)

结果的确是正确的,但在函数a_add(x)中没有调用变量a(没有出现变量a).

def a_add(a):

return a

global a

虽然使用global可使变量使用起来非常方便,但也容易引起混淆,故在使用过程中还是谨慎为好.

递归,就是函数调用它自身.递归必须设置停止条件,否则函数将无法终止,形成死循环.

以计算阶乘为例:

def func(n):

if n==1:

return 1

else:

return n*func(n-1) #func( )调用func( )

嵌套,指在函数中调用另外的函数.这是程序中常见的一种结构,在此不再赘述.

匿名函数

Python中可以在参数前加上关键字lambda定义一个匿名函数,这样的函数一般都属于"一次性"的.

程序1:这是一个常规的函数定义和调用.

def f_add(x,y):

return x+y

f_add=lambda x,y:x+y

python回调函数的使用方法

python回调函数的使用方法

在计算机程序设计中,回调函数,或简称回调(Callback),是指通过函数参数传递到其它代码的,某一块可执行代码的引用.这一设计允许了底层代码调用在高层定义的子程序

有两种类型的回调函数:

那么,在python中如何实现回调函数呢,看代码:

代码如下:

def my_callback(input):

print "function my_callback was called with %s input" % (input,)

def caller(input, func):

func(input)

caller(i, my_callback)

回调函数是什么意思 什么是回调函数

①.、回调函数就是一个被作为参数传递的函数.在C语言中,回调函数只能使用函数指针实现,在C++、Python、ECMAScript等更现代的编程语言中还可以使用仿函数或匿名函数.

以上就是土嘎嘎小编为大家整理的python设置回调函数相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章