why does this works SOMETIMES in python ? (variable scope)
本问题已经有最佳答案,请猛点这里访问。
这不起作用:(未定义全局名称"a")。
1 2 3 4 5 | if True: a = 3 else: a = 4 print a |
这工作:
1 2 3 4 5 6 7 8 9 | class A: def f(self): if True: a = 3 else: a = 4 print a A().f() |
这不起作用:(未定义全局名称"a")。
1 2 3 4 5 6 7 | class A: def __init__(self): a = 3 def f(self): print a A().f() |
为什么它在一种情况下有效而在另一种情况下无效?我认为如果它在案例(2)中起作用,那是因为
编辑:
示例1不起作用,至少在Python2.7解释器中不起作用。这就是为什么示例1和2是矛盾的。
在第三个例子中,
1 2 3 4 5 | class A: def __init__(self): self.a = 3 def f(self): print self.a |
您的其他示例实际上都有效,因为在两个
1 2 3 4 5 6 7 8 | >>> if True: a = 3 else: a = 4 >>> print a 3 |
当您在函数中创建变量时,如下所示
1 2 | def __init__(self): a = 3 |
它只能在该函数中访问。这就是为什么1和2都有效。在第三种情况下,您在一个函数中创建一个局部变量,并尝试在另一个变量不可见的函数中访问它。这就是它失败的原因。
为了使第三种情况正常工作,请将变量添加到当前对象(
1 2 | def __init__(self): self.a = 3 |
这只能用当前对象访问
1 2 | def f(self): print self.a |
编辑:
对于第一个语句,如果您执行这样的
1 2 3 4 5 6 7 | >>> if True: ... a = 3 ... else: ... a = 4 ... >>> print a 3 |