问题令人困惑。这是一个例子。
class some_class():
some_var = 5
def some_fun(self):
def another_fun():
return self.some_var
这没问题吧?我不必: another_fun(self) 调用self?我实际上测试了它并且它有效。我只是想澄清一下,因为这让我有点不确定。
问题令人困惑。这是一个例子。
class some_class():
some_var = 5
def some_fun(self):
def another_fun():
return self.some_var
这没问题吧?我不必: another_fun(self) 调用self?我实际上测试了它并且它有效。我只是想澄清一下,因为这让我有点不确定。
在您的情况下,它是不需要的,因为another_fun
它嵌套在其他函数中,因此它从该函数中捕获本地名称,其中包括self
. 实际上,任何可访问的名称都可以从some_fun
访问another_fun
。
这就是一些人所说的闭包,编写创建函数的函数很棒。经典的例子是:
def MultiplyBy(x):
def M(y):
return x * y
return M
Double = MultiplyBy(2)
Triple = MultiplyBy(3)
print Double(10), Triple(10)
那将打印20 30
.
是的,当您在另一个函数中定义一个函数时,内部函数可以从外部函数读取变量。这不是特定于self
. 它适用于所有函数中的所有变量:
>>> def outer():
... a = 2
... def inner():
... print a
... inner()
>>> outer()
2
在 Python 2 中,您不能在内部函数中重新绑定外部变量(即,您不能a = 3
在inner
上面执行操作)。在 Python 3 中,您可以使用nonlocal
语句执行此操作。
然而,你为什么要这样做?首先,您上面的代码甚至没有调用another_fun
,所以它的作用无关紧要。一般来说,在其他函数中定义函数有点奇怪。这样做肯定有合法的案例(例如,装饰器),但在许多情况下,它可能会引起混淆。