>>> f = lambda x: x * x
>>> f<function <lambda> at 0x101c6ef28> >>> f(5) 25def f(x): return x * x
关键字lambda
表示匿名函数,冒号前面的x
表示函数参数。
匿名函数有个限制,就是只能有一个表达式,不用写return
,返回值就是该表达式的结果。
import time def foo(): print("foo...") #遵守开放封闭原则对原有函数不能直接修改 def show_time(func): start = time.time() func() end = time.time() print('spend time %s' % (end-start)) 用其他函数直接调用会使函数名更换 def logger(flag =''): def show_time(f): def inner(*args): start = time.time() f(*args) end = time.time() print('speed %s'%(end-start)) if flag == 'true': print('日志记录') return inner return show_time #添加装饰器函数 @logger('true')#foo = show_time(foo) def foo(): print("foo...") time.sleep(2) @logger()#bar =show_time(bar) def bar(): print('foo,,,') time.sleep(2) #@show_time#foo = show_time(foo) def add(*args): sum=0 for i in args: sum+=i print(sum) time.sleep(1) add(1,2,4,4) 此时函数的_name_属性已经改变 import functools def log(text): def decorator(func): @functools.wraps(func)#此语句将返回的wrapper函数名的_name_属性改为func def wrapper(*args, **kw): print('%s %s():' % (text, func.__name__)) return func(*args, **kw) return wrapper return decorator