Lambda函数作为类成员

时间:2014-12-17 23:24:42

标签: python

我想在这里写一个惯用的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

有没有人从惯用的蟒蛇镜头中澄清这一点。

2 个答案:

答案 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

这种文档方法非常易读,大多数自动文档工具也支持