我不太理解以下代码的结果是什么:
输出结果是:
另一段代码是:
输出结果为:
输出为:
:
my_str = "outside func"
def func():
my_str = "inside func"
class C():
print(my_str)
print((lambda:my_str)())
my_str = "inside C"
print(my_str)
输出结果是:
outside func
inside func
inside C
另一段代码是:
my_str = "not in class"
class C:
my_str = "in the class"
print([my_str for i in (1,2)])
print(list(my_str for i in (1,2)))
输出结果为:
[‘in the class’, 'in the class’]
['not in class’, 'not in class’]
问题是:
- 每个print()语句中发生了什么?
- 有人能解释一下为什么print()语句从不同的命名空间获取字符串吗?
编辑1:
我认为这与这个问题不同,因为我谦虚地认为那里的答案没有解释这种变化:
my_str = "outside func"
def func():
my_str = "inside func"
class C():
print(my_str)
print((lambda:my_str)())
#my_str = "inside C"
print(my_str)
输出为:
inside func
inside func
inside func
编辑2:
的确,这是一个重复问题,来自这个问题,因为正如Martijn Pieters所说:
那里的答案说明:如果在类体内分配了名称,几乎是在开始时。你赋值给了my_str,使它与y相同。注释掉那行意味着你不再分配给my_str,使它与x相同。