#匿名函数 #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')
匿名函数和装饰器
猜你喜欢
转载自blog.csdn.net/xijiao_jiao/article/details/80283399
今日推荐
周排行