本帖最后由 淰7331 于 2021-1-21 20:57 编辑
''' 高阶函数
函数名本质上就是一个指向该函数的变量 ''' print(abs(-5)) print(abs) f = abs print(f(-5)) abs = 7 print(abs) # print(abs(-5)) ''' 函数作为参数传入
一个函数A可以接收另一个函数B作为参数,我们把这个函数A称为高阶函数 ''' def add(x,y,f): return f(x)+f(y)
print(add(3,4,f)) print(add(-3,-4,f))
def g(x): return x*x
print(add(3,4,g))
# map()函数 /reduce()/filter() r = map(g,[1,2,3,4,5]) print(list(r))
''' 函数作为返回值 '''
def s(*args): ss = 0 for arg in args: ss += arg return ss
print(s(1,2,3,4)) print(s(1,3,5,7)) ''' lazy_s()函数中定义了内部函数s(),而s()函数中又引用了外部函数lazy_s()的参数 args 当lazy_s()函数返回函数s(),相关的参数和变量都已经保存在返回的函数中 我们把这种程序结构称为 闭包Closure ''' def lazy_s(*args): # 定义函数 def s(): ss = 0 for arg in args: ss += arg return ss return s
h = lazy_s(1,2,3,4)
''' def s(): ss = 0 for arg in (1,2,3,4): ss += arg return ss
''' print(h) print(h())
''' 高阶函数
函数名本质上就是一个指向该函数的变量 '''
print(abs(-5)) print(abs) f = abs print(f(-5)) abs = 7 print(abs) # print(abs(-5)) ''' 函数作为参数传入
一个函数A可以接收另一个函数B作为参数,我们把这个函数A称为高阶函数 ''' def add(x,y,f): return f(x)+f(y)
print(add(3,4,f)) print(add(-3,-4,f))
def g(x): return x*x
print(add(3,4,g))
# map()函数 /reduce()/filter() r = map(g,[1,2,3,4,5]) print(list(r))
''' 函数作为返回值 '''
def s(*args): ss = 0 for arg in args: ss += arg return ss
print(s(1,2,3,4)) print(s(1,3,5,7)) ''' lazy_s()函数中定义了内部函数s(),而s()函数中又引用了外部函数lazy_s()的参数 args 当lazy_s()函数返回函数s(),相关的参数和变量都已经保存在返回的函数中 我们把这种程序结构称为 闭包Closure ''' def lazy_s(*args): # 定义函数 def s(): ss = 0 for arg in args: ss += arg return ss return s
h = lazy_s(1,2,3,4)
''' def s(): ss = 0 for arg in (1,2,3,4): ss += arg return ss
''' print(h) print(h())
''' 匿名函数 lambda 表达式 匿名函数一般只 用于处理简单的情况 '''
def g(x): return x*x
r = map(g,[1,2,3,4,5]) print(list(r))
r = map(lambda x:x*x*x,[1,2,3,4,5]) print(list(r))
f = lambda x,y:x+y print(f(2,3))
# 将下面的函数用匿名函数重写 def is_odd(n): return n%2 == 1
print(is_odd(3)) print(is_odd(2))
h = lambda n:n%2==1 ''' 装饰器Decorator 在代码运行期间动态增加功能的方式,就称为装饰器 '''
# 创建一个装饰器 def log(func): ''' func: 将要被装饰的函数 ''' def wrapper(*args,**kw): print('调用函数:%s'%func.__name__) return func(*args,**kw) return wrapper
import time
@log # now = log(now) def now(): # print('调用函数:%s'%now.__name__) print(time.strftime('%Y-%m-%d %H:%M:%S'))
now()
# print(now) # print(now.__name__) # now.__name__ = '现在' # print(f.__name__)
import functools
# 可以传参的装饰器 def log2(text): def decorator(func): @functools.wraps(func) def wrapper(*args,**kw): # wrapper.__name__ = func.__name__ print('%s:%s'%(text,func.__name__)) return func(*args,**kw) return wrapper return decorator
@log2('马上立刻执行函数') # now2 = log2('马上立刻执行函数')(now2) def now2(): # print('调用函数:%s'%now.__name__) print(time.strftime('%Y-%m-%d %H:%M:%S'))
now2() print(now2.__name__)
|