Simon项

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

“变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。”

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行是怎么产生的。总有一天 我可以的。

 什么是参数结构???

什么事闭包???

posted on 2018-01-26 12:00  Simon项  阅读(132)  评论(0)    收藏  举报