python中的args和kw:
*args
:表示就是将实参中按照位置传值,多余的值都给args,且以元组的方式呈现
**kw
:表示就是形参中按照关键字传值,多余的值都给kw,且以字典*的方式呈现
def foo(x,*args,**kwargs):
print(x)
print(args)
print(kwargs)
foo(1,2,3,4,y=1,a=2,b=3,c=4)#将1传给了x,将2,3,4以元组方式传给了args,y=1,a=2,b=3,c=4以字典的方式给了kwargs
lambda表达式:
python中的匿名函数,lambda x: x*x
@decorator装饰器:
定义一个函数,可以在运行中动态增加功能又不改动函数本身
@new_fun
def f(x):
return x*2
def f(x):
return x*2
f1 = new_fn(f)
python闭包:
def count():
fs = []
for i in range(1, 4):
f():
return i * i
fs.append(f)
return fs
f1, f2, f3 = count()
fs数组中存储的是三个指向f函数的函数指针,i变量的值在for循环结束后已经赋值为3,所以f1,f2,f3的结果都是9。
def count():
fs=[]
for i in range(1,4):
f(i):
g():
return i * i
return g
r = f(i)
fs.append(r)
return fs
f1, f2, f3 = count()
fs当前数组中存储的函数指针把for循环i变量的值作为fs内函数指针的参数
import time
def performance(f):
def fn(*args, **kw):
t1 = time.time()
r = f(*args, **kw)
t2 = time.time()
print 'call %s() in %fs' % (f.__name__, (t2-t1))
return r
return fn
@performance
def factorial(n):
return reduce(lambda x,y: x*y, range(1, n+1))
print factorial(10)