本文共 1836 字,大约阅读时间需要 6 分钟。
1. 关键字参数
比如你有一个函数定义为functest(name,age),正常的调用方式为functest(‘cary‘,25),我们也可以指定参数来调用,如functest(age=25,name=’cary‘),这样python的解释器就可以通过关键字来匹配参数的值了。
2. 函数装饰器
2.1.装饰器实际就是函数,一般装饰器可以放一些通用功能的代码来降低程序复杂度,比如日志功能。
@deco
def func():pass
等价于:func=deco(func)
下面是一个例子,tsdeco是一个显示何时调用函数的装饰器。
from time import ctime, sleep
def tsdeco(func):
def wrappedFunc():
print '[%s] %s() called' % (
ctime(), func.__name__)
return func()
return wrappedFunc
@tsdeco
def func():
print "func called"
func()
sleep(4)
func()
结果如下:
[Fri Mar 05 14:23:04 2010] func() called
func called
[Fri Mar 05 14:23:08 2010] func() called
func called
3. 函数作为参数传递,下面是一个例子
def convert(func, seq):
'conv. sequence of numbers to same type'
return [func(eachNum) for eachNum in seq]
myseq = (123, 45.67, -6.2e8, 999999999L)
print convert(int, myseq)
print convert(long, myseq)
print convert(float, myseq)
4. 可变长度的参数
4.1.在函数的参数列表中使用*号表示将元组作为可变参数传给函数,如下:
>>> def testfunc(arg1,*args):
... print "arg1:",arg1
... for item in args:
... print item
...
>>> testfunc('asd')
arg1: asd
>>> testfunc('asd',123,'sd',23)
arg1: asd
123
sd
23
4.2. 在函数的参数列表中使用**号表示将字典作为可变参数传给函数,如下:
>>> def testfunc(arg1,**args):
... print "arg1:",arg1
... for item in args.keys():
... print "key:%s,value:%s"%(item,str(args[item]))
...
>>> testfunc(12,c='dictest')
arg1: 12
key:c,value:dictest
5. 匿名函数与lambda
Python允许使用lambda关键字创造匿名函数,最简单的为我们由一个函数
def show():
return ‘Hello World‘
使用lambda的等价表达式为:
Lambda:‘Hello World‘
我们可以lambda赋值给一个引用,如,上面的:
a= Lambda:‘Hello World‘
a()可以调用。
Python提供了apply(),filter(),map(),redule()内建函数,这些函数提供了在python中可以找到的函数式编程的特征。Lambda函数可以很好的和使用了这些函数的应用程序结合起来,因为他们都带了一个可执行的函数对象,lambda表达式提供了迅速创造这些函数的机制。比如下面例子:
>>> map((lambda x:x*5),[0,1,2,3,4,5])
[0, 5, 10, 15, 20, 25]
>>> print 'total:',reduce((lambda x,y:x+2*y),range(5))
total: 20
所做运算为如下:
((((0+2*1)+2*2)+2*3)+2*4)
本文转自生鱼片博客园博客,原文链接:,如需转载请自行联系原作者