返回信息流有点独特的模块。
partial,为了绑定参数,顺便减少参数输入.
wrapper?返回的是一个函数指针?封装函数
wrapper可不可以理解成在原来的函数之上进行一层封装,可以在这个封装中加一些操作,如打印信息,记录信息等,从而使得不仅可以调用本来的函数,还可以加上一些其他操作。
https://docs.python.org/2/library/functools.html
@decorator也是有点难,不过理解了,还不会主动有用他的思维。
Python的闭包是什么概念呢? 函数以及其运行的环境?Ref:http://www.ibm.com/developerworks/cn/linux/l-cn-closure/
闭包只能读取外围引入的数据,不可以进行写入。
http://book42qu.readthedocs.org/en/latest/python/python-closures-and-decorators.html
Python也不简单啊!!
@nuanyangyang
这是一条镜像帖。来源:北邮人论坛 / python / #7864同步于 2015/7/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
Python:functools模块相关概念求解
lc10210103
2015/7/20镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
partial 很有用啊
py 的 lambda 残废。
有了 nonlocal 应该 closure 是可以读写了。
本来 java 就比 python 简单。
先理解 decorator,再理解 wrapper
In [1]: def adder(f):
...: return lambda:f()+1
...:
In [2]: def f():
...: return 1
...: f
...:
Out[2]: <function __main__.f>
In [3]: f()
Out[3]: 1
In [4]: @adder
...: def f():
...: return 1
...: f()
...:
Out[4]: 2
In [5]: f.__name__
Out[5]: '<lambda>'
和 wrapper 的文档对比
哈哈,这个笑点可以有!!谁叫我第一个就想起你呢,我的装饰器!
【 在 nuanyangyang 的大作中提到: 】
: 我……我不是decorator啊
谢谢哈。主要是自己用到的少,所以没有感觉到其中的妙用。不过牛逼的工程中经常看到各种类似的用法。
谢谢提到nonlocal关键字,学到一点。其他的因为没有对比,所以无法表示赞同或者反对。
【 在 qiukun 的大作中提到: 】
: partial 很有用啊
: py 的 lambda 残废。
: 有了 nonlocal 应该 closure 是可以读写了。
: ...................
可以先找点函数式的入门文章看看。
吐槽:不过 python 这 lambda 搞函数式没啥意思,而且 Guido 自己也不是 FP 粉,他说 for 可读性高,py3 把 reduce 移到 functools 里面了。
所以。。不如学啥都能干的 javascript 吧~
【 在 lc10210103 的大作中提到: 】
: 谢谢哈。主要是自己用到的少,所以没有感觉到其中的妙用。不过牛逼的工程中经常看到各种类似的用法。
: 谢谢提到nonlocal关键字,学到一点。其他的因为没有对比,所以无法表示赞同或者反对。
:
我了解挺少的,但是用得顺手的也就Python了。
谢谢哈!
【 在 qiukun 的大作中提到: 】
: 可以先找点函数式的入门文章看看。
: 吐槽:不过 python 这 lambda 搞函数式没啥意思,而且 Guido 自己也不是 FP 粉,他说 for 可读性高,py3 把 reduce 移到 functools 里面了。
: 所以。。不如学啥都能干的 javascript 吧~
: ...................
像这段小函数,我觉得就和偏函数很像。
先把一个参数绑定,生成一个新函数,然后可以继续调用。不知道对不对。
这么写好处在哪里呢?作为装饰器,使得类似的操作只需要一个装饰器就搞定?
def _set_msg_type(msg_type):
'''Annotate corresponding OFP message type'''
def _set_cls_msg_type(cls):
cls.cls_msg_type = msg_type
return cls
return _set_cls_msg_type
【 在 qiukun 的大作中提到: 】
: 可以先找点函数式的入门文章看看。
: 吐槽:不过 python 这 lambda 搞函数式没啥意思,而且 Guido 自己也不是 FP 粉,他说 for 可读性高,py3 把 reduce 移到 functools 里面了。
: 所以。。不如学啥都能干的 javascript 吧~
: ...................
= = 你这么写没啥好处啊
用 functools.partial 更可读
decorator 也是因为高阶函数并不少见,所以干脆提供个方便的方式
其实如果 lambda 不残废直接
f = decorate(lambda x:
a
b)
就 ok 了
当然仅就 decorator 的用途现有的写法应该更好看。
真需要匿名函数的情景就蛋疼了。
addEventHandler(Pop, lambda x: xxxxxxxx) 就完了,居然还要起名。。
不用过度理解,用得多所以有 patterns 罢了。
【 在 lc10210103 的大作中提到: 】
: 像这段小函数,我觉得就和偏函数很像。
: 先把一个参数绑定,生成一个新函数,然后可以继续调用。不知道对不对。
: 这么写好处在哪里呢?作为装饰器,使得类似的操作只需要一个装饰器就搞定?
: ...................
这段其实不是我写的,是Ryu里面写的,我就觉得很新颖。用途估计就是作为装饰器,把那些所有需要做这个操作的函数都装饰一遍吧。
【 在 qiukun 的大作中提到: 】
: = = 你这么写没啥好处啊
: 用 functools.partial 更可读
: decorator 也是因为高阶函数并不少见,所以干脆提供个方便的方式
: ...................