#匿名函数
#1。匿名函数的关键字为 lamnda,冒号前面是形式参数,冒号后面是返回值;
#2。匿名函数的形式参数可以是:必须,默认,可变,关键字参数
#1)。无参数
f=lambda:'hello'
print(f())
f1=lambda x,y=2:x**y
print(f1(2)) #x=2,y=2 输出值为4
print(f1(2,3)) #x=2,y=3 输出值为8
f2=lambda *args:sum(args)
print(f2(1,2,3,4,5)) #输出值为1+2+3+4+5=15
f3=lambda x,y=2,*args,**kwargs:(x,y,args,kwargs)
print(f3(2,3,4,5,a=1,b=2)) #输出值为(2, 3, (4, 5), {'a': 1, 'b': 2})
def mypow(x):
return x**2
print(list(map(lambda x:x**2,range(5))))
def is_odd(num):
return num%2==0
print(list(filter(lambda x:x%2==0,range(10))))
#高阶函数————返回值是函数的
def compare(base,y):
return base > y
print(compare(5,3))
print(compare(5,20))
#闭包:函数里面嵌套函数:
def compare1(base):
def compare2(y):
return base>y
return compare2
compare_base_10=compare1(10)
print(compare_base_10(3))
print(compare_base_10(29))
#装饰器:器:函数 类:用来装饰函数的东西
#装饰器应用场景:如果你想在执行函数之前做什么或者执行函数之后做什么,建议使用装饰器;
def add_info(fun): #fun=saveMoney
def wrapper():
print('六一儿童节快乐!')
print('欢迎进入ICBC银行ATM机')
fun() #saveMoney()
return wrapper
#python的语法糖
@add_info
def saveMoney(): #saveMoney=add_info(saveMoney)
print('欢迎使用存钱功能!')
saveMoney()
#装饰器模版
import time
import functools
def add_info(fun):
@functools.wraps(fun)
def wrapper(*args,**kwargs):
#函数执行之前做的操作
res = fun(*args,**kwargs)
#函数执行之前做的操作
return res
return wrapper
#需求:编写一装饰器timeit,用来装饰某函数执行时间的装饰器;
def timeit(fun):
def wrapper(x,y):
start_time=time.time()
fun(x,y)
end_time=time.time()
print('%s函数运行时间为%s'%(fun.__name__,end_time-start_time))
return wrapper
@timeit
def hello():
time.sleep(0.04)
print('hello')
@timeit
def add(x,y):
return x+y
hello()
print(add(1,3))
#万能装饰器
#需求:编写一装饰器timeit,用来装饰某韩式执行时间的装饰器;
def timeit(fun): # fun = world
# 2. 注意: functools.wraps(fun): 可以保留add, world等函数的函数名, 帮助文档等属性信息;
@functools.wraps(fun)
def wrapper(*args, **kwargs): # kwargs = {'a':1, 'b':2}
"""
this is wrapper function。。。。
:param args:
:param kwargs:
:return:
"""
start_time = time.time()
temp = fun(*args, **kwargs) # world(a=1, b=2)
end_time = time.time()
print("%s函数运行时间为%s" % (fun.__name__, end_time - start_time))
return temp
return wrapper
@timeit # hello = timeit(hello) # hello = wrapper
def hello():
time.sleep(0.04)
print("hello")
@timeit # add = timeit(add) # add = wrapper
def add(x,y):
"""
add(x:int, y:int)->int:
:param x:
:param y:
:return:
"""
return x+y
# hello() # wrapper()
print(add(1,3))
print(add.__name__)
print(add.__doc__)
@timeit # world = timeit(world) # world = wrapper
def world(**kwargs):
"""this is **kwargs test"""
return kwargs
print(world(a=1, b=2))
print(world.__name__)
print(world.__doc__)
#return原理
def fun():
print('hello')
return 'world' #在执行函数时,遇到return,函数就执行结束;return后面的永不执行
print('gcc')
print(fun())
#装饰器第2个模版:
import functools
def is_admin(fun):
@functools.wraps(fun)
def wrapper(*args,**kwargs):
if kwargs.get('name')=='root':
temp=fun(*args,**kwargs)
return temp
else:
print('not root/admin user,no permisson add student')
return wrapper
@is_admin
def add_student(name):
print('添加学生信息')
add_student(name='root')
匿名函数和装饰器
最新推荐文章于 2022-09-06 19:25:41 发布