“变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。”
1 def add(x,y,f): 2 return f(x)+f(y) 3 res=add(3,-6,abs) 4 print(res)
运行结果:
1 >>>
2 RESTART: C:/Users/asdf/AppData/Local/Programs/Python/Python36/tryyyyy/TEXTgaojie.py
3 9
4 >>>
上面的例子似乎不足以说明高阶函数的所有用法,abs()是内置的。可不可以调用一个我自己定义的函数,叫它2次方的2倍吧:
1 def add(x,y,f): 2 return f(x)+f(y) 3 def couplespuare(x): 4 return x*x*2 5 6 res=add(3,-6,couplespuare) 7 print(res)
此时我还能感受到当我按下F5是内心的忐忑:
1 >>>
2 RESTART: C:/Users/asdf/AppData/Local/Programs/Python/Python36/tryyyyy/TEXTgaojie.py
3 90
4 >>>
居然有结果。这可真是··· ··· 好吧,需要验算一下,等着。
>>> 3*3*2+6*6*2 90 >>>
ok,就是这样。刚才居然听到项爷的同事说项爷有对象了所以很开心。而且是对一个貌似叫”暖暖“的女娃娃说的··· ··· 项爷去哪里了,怎么把电话落在了公共场合?
今天路上学到的柯里化:
1 def new_add(x): 2 def inner(y): 3 return x+y 4 return inner 5 print(new_add(2)(3))
增加一个新看到的例子:
1 def logger(fn): 2 def wrap(*args,**kwargs): 3 #before 4 #print("args={},kwargs={}".format(args,kwargs))此行报错我却不知道 5 ret=fn(*args,**kwargs) 6 #after 7 #print(ret) 8 return ret 9 return wrap 10 def show(): 11 return 'super' 12 13 def add(x,y): 14 return x+y 15 16 wandou=logger(add) 17 print(wandou(4,6)) 18 19 dadou=logger(show) 20 print(dadou())
运行结果如下:
RESTART: C:\Users\asdf\AppData\Local\Programs\Python\Python36\tryyyyy\TEXTgaojie.py 10 super >>>
注意注释中有一个问题。
抛开这个问题,再做一次修改看看:
1 def logger(fn): 2 def wrap(*args,**kwargs): 3 #before 4 #print("args={},kwargs={}".format(args,kwargs))此行报错我却不知道 5 ret=fn(*args,**kwargs) 6 #after 7 #print(ret) 8 return ret 9 return wrap 10 def show(): 11 print('super') 12 13 def add(x,y): 14 return x+y 15 16 wandou=logger(add) 17 print(wandou(4,6)) 18 19 dadou=logger(show) 20 dadou() 21 print('-----fengexian-----') 22 print(dadou())
运行结果如下:
1 RESTART: C:\Users\asdf\AppData\Local\Programs\Python\Python36\tryyyyy\TEXTgaojie.py 2 10 3 super 4 -----fengexian----- 5 super 6 None 7 >>>
今天的我还不能解释结果中的第6行是怎么产生的。总有一天 我可以的。
什么是参数结构???
什么事闭包???

浙公网安备 33010602011771号