欢迎来到千学网!
您现在的位置:首页 > 实用文 > 其他范文

Python回调函数用法实例详解

时间:2022-05-30 04:04:46 其他范文 收藏本文 下载本文

以下是小编给大家收集的Python回调函数用法实例详解,本文共9篇,欢迎大家前来参阅。

Python回调函数用法实例详解

篇1:Python回调函数用法实例详解

作者:tianmo 字体:[增加 减小] 类型:

这篇文章主要介绍了Python回调函数用法,以实例形式较为详细的分析了Python回调函数的定义、功能及相关使用技巧,需要的朋友可以参考下

本文实例讲述了Python回调函数用法,分享给大家供大家参考。具体分析如下:

一、百度百科上对回调函数的解释:

回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用为调用它所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

二、什么是回调:

软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户方的接口)。回调和异步调用的关系非常紧密,通常我们使用回调来实现异步消息的注册,通过异步调用来实现消息的通知。同步调用是三者当中最简单的,而回调又常常是异步调用的基础,因此,下面我们着重讨论回调机制在不同软件架构中的实现。

三、一个小例子:

#call.py import called def callback: print “in callback” def main(): #called.test() called.test_call(callback) print “in call.py” main() #called.py ‘‘‘‘‘ def test(): print “in called.py test()” ‘‘‘ def test_call(p_call): print “in called.py test_call()” p_call() joe@joe:~/test/python$ python call.py in called.py test_call() in callback in call.py joe@joe:~/test/python$

网上搜到的一个面向对象实现的例子:

当你要加入回调(Callback)功能的时候,代码往往会偏重于回调的实现而不是问题本身了。一个解决方法就是实现一个通用的基础类来解决回调的需求,然后再来实现你为某个事件(Event)所绑定(Binding)的方法(Method)。

代码如下:

class CallbackBase: def __init__(self): self.__callbackMap = {} for k in (getattr(self, x) for x in dir(self)): if hasattr(k, “bind_to_event”): self.__callbackMap.setdefault(k.bind_to_event, []).append(k) elif hasattr(k, “bind_to_event_list”): for j in k.bind_to_event_list: self.__callbackMap.setdefault(j, []).append(k) ## staticmethod is only used to create a namespace @staticmethod def callback(event): def f(g, ev = event): g.bind_to_event = ev return g return f @staticmethod def callbacklist(eventlist): def f(g, evl = eventlist): g.bind_to_event_list = evl return g return f def dispatch(self, event): l = self.__callbackMap[event] f = lambda *args, **kargs: map(lambda x: x(*args, **kargs), l) return f ## Sample class MyClass(CallbackBase): EVENT1 = 1 EVENT2 = 2 @CallbackBase.callback(EVENT1) def handler1(self, param = None): print “handler1 with param: %s” % str(param) return None @CallbackBase.callbacklist([EVENT1, EVENT2]) def handler2(self, param = None): print “handler2 with param: %s” % str(param) return None def run(self, event, param = None): self.dispatch(event)(param) if __name__ == “__main__”: a = MyClass() a.run(MyClass.EVENT1, ‘mandarina‘) a.run(MyClass.EVENT2, ‘naranja‘)

这里有一个类,它有两个事件(EVENT1和EVENT2)和两个处理函数(handler),

第一个处理函数handler1注册了EVENT1,而第二个处理函数handler2当EVENT1或者EVENT2发生的时候都会执行(即注册了全部的事件)。

运行函数(run)在MyClass的主循环中,它会将对应的事件派送(dispatch)出去。这(这里指dispatch函数)会返回一个函数,我们可以把所有需要传给这个函数的参数列表传给它。这个函数运行结束会返回一个列表(list),列表中是所有的返回值。

也许,使用Metaclass能够实现的更优雅一些吧。

希望本文所述对大家的Python程序设计有所帮助。

篇2:python函数局部变量用法实例分析

作者:东郭先生 字体:[增加 减小] 类型:转载

当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是 局部 的。这称为变量的 作用域 。所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始。

一、使用局部变量

示例如下:

#!/usr/bin/python# Filename: func_local.pydef func(x): print ‘x is‘, x x = 2 print ‘Changed local x to‘, xx = 50func(x)print ‘x is still‘, x

输出:

$ python func_local.pyx is 50Changed local x to 2x is still 50

工作原理:

在函数中,我们第一次使用x的 值 的时候,Python使用函数声明的形参的值。

接下来,我们把值2赋给x。x是函数的局部变量。所以,当我们在函数内改变x的值的时候,在主块中定义的x不受影响。

在最后一个print语句中,我们证明了主块中的x的值确实没有受到影响,

二、使用global语句

如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是 全局 的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。

你可以使用定义在函数外的变量的值(假设在函数内没有同名的变量)。然而,我并不鼓励你这样做,并且你应该尽量避免这样做,因为这使得程序的读者会不清楚这个变量是在哪里定义的。使用global语句可以清楚地表明变量是在外面的块定义的。

使用global语句示例:

#!/usr/bin/python# Filename: func_global.pydef func(): global x print ‘x is‘, x x = 2 print ‘Changed local x to‘, xx = 50func()print ‘Value of x is‘, x

输出:

$ python func_global.pyx is 50Changed global x to 2Value of x is 2

工作原理:

global语句被用来声明x是全局的――因此,当我们在函数内把值赋给x的时候,这个变化也反映在我们在主块中使用x的值的时候。

你可以使用同一个global语句指定多个全局变量。例如global x, y, z。

希望本文所述对大家的Python程序设计有所帮助。

篇3:Python with用法实例

这篇文章主要介绍了Python with用法实例,本文讲解了with语句的几种使用方法和使用场景,需要的朋友可以参考下

python中with可以明显改进代码友好度,比如:

代码如下:

with open(‘a.txt‘) as f:

print f.readlines

为了我们自己的类也可以使用with, 只要给这个类增加两个函数__enter__, __exit__即可:

代码如下:

>>> class A:

def __enter__(self):

print ‘in enter‘

def __exit__(self, e_t, e_v, t_b):

print ‘in exit‘

>>> with A() as a:

print ‘in with‘

in enter

in with

in exit

另外python库中还有一个模块contextlib,使你不用构造含有__enter__, __exit__的类就可以使用with:

代码如下:

>>> from contextlib import contextmanager

>>> from __future__ import with_statement

>>> @contextmanager

... def context():

...    print ‘entering the zone‘

...    try:

...        yield

...    except Exception, e:

...        print ‘with an error %s‘%e

...        raise e

...    else:

...        print ‘with no error‘

...

>>> with context():

...    print ‘----in context call------‘

...

entering the zone

----in context call------

with no error

使用的最多的就是这个contextmanager, 另外还有一个closing 用处不大

代码如下:

from contextlib import closing

import urllib

with closing(urllib.urlopen(‘www.python.org‘)) as page:

for line in page:

print line

篇4:python函数形参用法实例分析

作者:不是JS 字体:[增加 减小] 类型:

这篇文章主要介绍了python函数形参用法,较为详细的讲述了Python函数形参的功能、定义及使用技巧,需要的朋友可以参考下

本文实例讲述了python函数形参用法,分享给大家供大家参考。具体如下:

函数形参:

函数取得的参数是你提供给函数的值,这样函数就可以利用这些值 做 一些事情。这些参数就像变量一样,只不过它们的值是在我们调用函数的时候定义的,而非在函数本身内赋值。

参数在函数定义的圆括号对内指定,用逗号分割。当我们调用函数的时候,我们以同样的方式提供值。注意我们使用过的术语――函数中的参数名称为 形参 而你提供给函数调用的值称为 实参 。

使用函数形参:

#!/usr/bin/python# Filename: func_param.pydef printMax(a, b): if a > b: print a, ‘is maximum‘ else: print b, ‘is maximum‘printMax(3, 4) # directly give literal valuesx = 5y = 7printMax(x, y) # give variables as arguments

运行结果如下:

4 is maximum

7 is maximum

工作原理:

这里,我们定义了一个称为printMax的函数,这个函数需要两个形参,叫做a和b,

我们使用if..else语句找出两者之中较大的一个数,并且打印较大的那个数。

在第一个printMax使用中,我们直接把数,即实参,提供给函数。在第二个使用中,我们使用变量调用函数。printMax(x, y)使实参x的值赋给形参a,实参y的值赋给形参b。在两次调用中,printMax函数的工作完全相同。

希望本文所述对大家的Python程序设计有所帮助。

篇5:python中call内置函数用法实例

作者:MaxOmnis 字体:[增加 减小] 类型:转载

这篇文章主要介绍了python中__call__内置函数用法,实例分析了python中__call__内置函数的原理与使用技巧,需要的朋友可以参考下

本文实例讲述了python中__call__内置函数的用法,分享给大家供大家参考。具体分析如下:

对象通过提供__call__(slef, [,*args [,**kwargs]])方法可以模拟函数的行为,如果一个对象x提供了该方法,就可以像函数一样使用它,也就是说x(arg1, arg2...) 等同于调用x.__call__(self, arg1, arg2),

模拟函数的对象可以用于创建仿函数(functor) 或代理(proxy)

class DistanceForm(object): def __init__(self, origin): self.origin = origin print “origin :”+str(origin) def __call__(self, x): print “x :”+str(x)p = DistanceForm(100)p

输出:

>>> origin :100x :2000

希望本文所述对大家的Python程序设计有所帮助。

篇6:python del函数用法

最近更 新

python抓取京东价格分析京东商品价格走势

python中mechanize库的简单使用示例

python实现apahce网站日志分析示例

用python写asp详细讲解

python基础教程之元组操作使用详解

Python程序员鲜为人知但你应该知道的17个

python求斐波那契数列示例分享

使用python实现递归版汉诺塔示例(汉诺塔递

Python编写的com组件发生R6034错误的原因

python连接sql server乱码的解决方法

热 点 排 行

Python入门教程 超详细1小时学会

python 中文乱码问题深入分析

比较详细Python正则表达式操作指

Python字符串的encode与decode研

Python open读写文件实现脚本

Python enumerate遍历数组示例应

Python 深入理解yield

Python+Django在windows下的开发

python 文件和路径操作函数小结

python 字符串split的用法分享

篇7:Python sys.argv用法实例

这篇文章主要介绍了Python sys.argv用法实例,sys.argv[]是用来获取命令行参数的,sys.argv[0]表示代码本身文件路径,其它则用来表示获取输入参数,需要的朋友可以参考下

sys.argv变量是一个字符串的列表,特别地,sys.argv包含了命令行参数 的列表,即使用命令行传递给你的程序的参数。

这里,当我们执行python using_sys.py we are arguments的时候,我们使用python命令运行using_sys.py模块,后面跟着的内容被作为参数传递给程序。Python为我们把它存储在sys.argv变量中。记住,脚本的名称总是sys.argv列表的第一个参数。所以,在这里,‘using_sys.py‘是sys.argv[0]、‘we‘是sys.argv[1]、‘are‘是sys.argv[2]以及‘arguments‘是sys.argv[3]。注意,Python从0开始计数,而非从1开始。

sys.argv[]是用来获取命令行参数的,sys.argv[0]表示代码本身文件路径;比如在CMD命令行输入 “python test.py -help”,那么sys.argv[0]就代表“test.py”。

sys.startswith 是用来判断一个对象是以什么开头的,比如在python命令行输入“‘abc‘.startswith(‘ab‘)”就会返回True

以下实例参考:

代码如下:

#!/usr/local/bin/env python

import sys

def readfile(filename):

‘‘‘Print a file to the standard output.‘‘‘

f = file(filename)

while True:

line = f.readline()

if len(line) == 0:

break

print line,

f.close()

print “sys.argv[0]---------”,sys.argv[0]

print “sys.argv[1]---------”,sys.argv[1]

print “sys.argv[2]---------”,sys.argv[2]

# Script. starts from here

if len(sys.argv) < 2:

print ‘No action specified.‘

sys.exit()

if sys.argv[1].startswith(‘--‘):

ption = sys.argv[1][2:]

# fetch sys.argv[1] but without the first two characters

if ption == ‘version‘:

print ‘Version 1.2‘

elif ption == ‘help‘:

print ‘‘‘"

This program prints files to the standard output.

Any number of files can be specified.

Options include:

--version : Prints the version number

--help   : Display this help‘‘‘

else:

print ‘Unknown option.‘

sys.exit()

else:

for filename in sys.argv[1:]:

readfile(filename)

执行结果:# python test.py --version help

代码如下:

sys.argv[0]--------- test.py

sys.argv[1]--------- --version

sys.argv[2]--------- help

Version 1.2

注意:sys.argv[1][2:]表示从第二个参数,从第三个字符开始截取到最后结尾,本例结果为:version

篇8:python关键字and和or用法实例

这篇文章主要介绍了python关键字and和or用法实例,本文直接给出实现代码,需要的朋友可以参考下

python 中的and从左到右计算表达式,若所有值均为真,则返回最后一个值,若存在假,返回第一个假值,

or也是从左到有计算表达式,返回第一个为真的值。

代码如下:

IDLE 1.2.4

>>>‘a‘and‘b‘

‘b‘

>>>‘‘and‘b‘

‘‘

>>>‘a‘or‘b‘

‘a‘

>>>‘‘or‘b‘

‘b‘

类似三目表达式的用法:bool? a : b

代码如下:

>>> a =‘first‘

>>> b =‘second‘

>>>1and a or b  # 等价于 bool = true时的情况

‘first‘

>>>0and a or b  # 等价于 bool = false时的情况

‘second‘

>>> a =‘‘

>>>1and a or b  # a为假时,则出现问题

‘second‘

>>>(1and[a]or[b])[0]# 安全用法,因为[a]不可能为假,至少有一个元素

‘‘

>>>

篇9:Python函数返回值实例分析

作者:liuzx32 字体:[增加 减小] 类型:转载

这篇文章主要介绍了Python函数返回值,实例分析了Python中返回一个返回值与多个返回值的方法,需要的朋友可以参考下

本文实例讲述了Python的函数返回值用法,分享给大家供大家参考。具体分析如下:

最近学一些Python的基本用法,看到定义函数,发现似乎只能返回一个返回值,想想matlab里返回多个返回值多方便啊,网上查了查,看到有返回多个值的方法。

python 函数返回值有两种形式:

1 返回一个值。

2 返回多个值,

现看看返回一个值的吧。

def firstvalue(a,b): c = a + b return cprint firstvalue(1,2) #结果:3

再看看返回多个值的: 那怎么可以返回多个值呢,其他的语言一般调用函数的话,只能返回一个值,可能我不太熟悉所有的语言,我知道的语言只能返回一个值,而python可以返回多个值,感觉非常方便,发代码看下:

def secondvalue(a,b): c = a + b return (a,b,c)x,y,z = secondvalue(1,2)print ‘x:‘,x,‘y:‘,y,‘z:‘,z

希望本文所述对大家的Python程序设计有所帮助。

Python continue语句用法实例

Python中自定义函数的教程

理解Python中的类与实例

Codeigniter的dom类用法实例

Excel函数应用实例:折旧值计算EXCEL 函数

指向函数的指针数组的用法

python中常用的各种数据库操作模块和连接实例

PYTHON学习札记

一个C++继承、虚函数和多态性的实例代码

Python中使用装饰器和元编程实现结构体类实例

《Python回调函数用法实例详解(精选9篇).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式

点击下载本文文档