如何在Python(闭包)中的类方法中使用匿名函数?

时间:2010-09-06 05:37:42

标签: python closures anonymous-function

class Test:

    def somemethod(self):
        def write():
            print 'hello'

        write()

x = Test()
x.somemethod()

write()是一个将通过somemethod()多次使用的函数。 somemethod()是类中唯一需要使用它的函数,因此在somemethod()之外定义它似乎很愚蠢。关闭似乎是要走的路。

当我运行该代码时,我收到以下错误:

TypeError: somemethod() takes exactly 2 arguments (1 given)

我做错了什么? self是否被传递给write()? :/

2 个答案:

答案 0 :(得分:3)

我发现无法重现您报告的问题:

>>> class Test(object):
...   def somemethod(self):
...     def write():
...       print 'hello'
...     write()
... 
>>> x = Test()
>>> x.somemethod()
hello
>>> 

所以我相信你一定做过一些转录错误,或其他什么。当你运行我正在显示的代码时,你看到了什么? (在所有平台上的Python 2.4,2.5,2.6,2.7中完全相同)。

答案 1 :(得分:0)

它也适用于我:

>>> class Test:
...     def somemethod(self):
...         def write():
...             print 'hello'
...         write()
... 
>>> 
>>> x = Test()
>>> x.somemethod()
hello
>>>     

我认为您可能正在使用标签空格,或者您的标识错误