我想在这里写一个惯用的python。
将Lambda函数编写为类成员的最佳方法是什么。我们如何评论它。
class foo:
def run(self,x):
""" I don't know what I am doing
"""
return x*3
class foo:
run= lambda x: x*3
有没有人从惯用的蟒蛇镜头中澄清这一点。
答案 0 :(得分:4)
使用lambda
之类的东西并不违法,但这很愚蠢。
lambda
的要点是方便地制作一个非常轻量级的功能对象,其使用是如此短暂,甚至不值得为它命名。一个典型的例子是GUI Framework的简单回调函数:
shutdown_button_callbacks = {
"on_mouse_click" : lambda: gui_shutdown("now"),
"on_mouse_right_click": lambda: show_context_menu("shutdown_menu")
}
由于这里的回调非常简单,而且它们只是被dict
用于GUI框架,所以只需将它们放在dict
中就可以了。声明。
如果您需要将函数对象绑定到名称,则应该使用普通的def
语句。这不仅会绑定名称,还会在函数对象上设置.__name__
属性,而且这是在Python中执行此操作的惯用方法。
Python有一个非常有限的lambda
,而Guido van Rossum这个词是永远不会改变的。因此,只要您需要除单个表达式之外的任何内容,您无论如何都不能使用lambda
。
def
语句和lambda
都生成函数对象;唯一的区别是def
绑定了一个名字。你仍然可以获得对函数对象的引用并存储它,传递它等等。没有什么比这更好的了。或关于lambda
函数对象的特殊内容。
P.S。 lambda
的另一个经典用法是用于map()
调用的简单代码段:
map(lambda x: x**2, range(9)) # returns squares of numbers 0 through 8 inclusive
但Python中的常见做法是使用列表推导,你可以直接放入代码片段而不用它来创建函数:
[x**2 for x in range(9)]
答案 1 :(得分:2)
如评论中所提到的那样,它通常不会被支持(除了对lambda
的使用不当)...但是按照惯例,你会像其他任何类成员一样评论它们
#: returns the square
fred = lambda x:x*x
或
fred = lambda x:x*x #: returns the square
甚至(虽然不那么美观)
fred = lambda x:x*x
''' returns the square '''
http://epydoc.sourceforge.net/manual-docstring.html#variable-docstrings
这种文档方法非常易读,大多数自动文档工具也支持