>>> class Foo:
def __init__(self):
pass
def bar(self, x=self):
pass
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
class Foo:
File "<pyshell#13>", line 4, in Foo
def bar(self, x=self):
NameError: name 'self' is not defined
>>>
>>> def foo(a, b=a+1):
return a, b
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
def foo(a, b=a+1):
NameError: name 'a' is not defined
这不起作用,因为它只是无效的语法。Python将不允许您使用
self.
,因为您的语法无效。让我们看看Python中函数参数的EBNF:您可以从上面的EBNF片段中分辨出来,也可以从中分辨不出来,但是Python不允许在参数中使用
.
操作符。这就是为什么你的第二种方法不起作用。你知道吗不过,让我们假设您的第二个示例是有效的Python语法。行吗?简而言之,答案仍然是否定的。这很简单,因为Python是如何解析函数/方法参数的。让我们看看这个例子:
发生什么事了?当
self
被清楚地定义时,Python为什么要提出一个NameError
。你知道吗当Python正在解析时,
bar
可以看到参数self
。但是,虽然Python已经“看到”了self
参数,但它没有将其定义为名称。因此,当Python试图解析第二个参数时,它会变得混乱,并引发NameError
。这种行为不仅限于 方法。函数也有同样的问题:总之,real第二个示例不起作用的原因是它是无效的Python语法。但是,即使它以某种方式工作,Python仍然会由于其解析参数的方式而引发错误。你知道吗
相关问题 更多 >
编程相关推荐