例如:这里有fake.py
文件和real.py
文件。在fake.py
中
a = 'fake a'
b = 'fake b'
在real.py
中
from fake import*
a = 'real a'
print(a,b)
然后打印出来:real a fake b
为什么会这样呢?
如果我想在a
中使用fake.py
怎么办?
我必须使用import fake
和fake.a
吗?
‘模块中的语句(本例中为假语句?)仅在第一次导入模块时才执行。
这是什么意思?
我刚开始编程,请帮忙谢谢。
发布于 2018-01-16 14:50:54
远离from some_module import *
,因为您将该模块的所有名称导入到当前模块命名空间中。
这将-在“名称冲突”的情况下,不仅覆盖任何先前定义的名称,而且,正如您所看到的,它们也可能被覆盖。
为什么会这样呢?
在您的例子中,from fake import *
大致相当于:
# equivalent to "from fake import *"
import fake
a = fake.a
b = fake.b
del fake
# Rest of the file
a = "real a"
print(a, b)
因此,难怪"fake a"
无法访问(也不打印)。
我必须使用
import fake
和fake.a
吗?
如果您想“减少”这类名称冲突的相似之处,这是一个很好的开端:
import fake
a = "real a"
print(a, fake.a, fake.b)
但您也可以使用别名:
import fake as f
a = "real a"
print(a, f.a, f.b)
您还可以从fake
导入特定的名称(也带有别名):
from fake import a as fake_a, b as fake_b
a = "real a"
print(a, fake_a, fake_b)
至于
如果我想在
a
中使用fake.py
怎么办?
应该没有问题,因为在fake.py
中没有导入,所以没有名称冲突。
发布于 2018-01-16 14:53:34
问题
您将从fake.py (a & b)导入两个全局变量,然后将一个新值分配给其中一个(a)。
解决方案
如果您想使用fake.a和fake.b,那么删除import指令中的*。使用此导入指令:
import fake
然后,您将能够使用此表单访问a&b变量。
fake.a
fake.b
https://stackoverflow.com/questions/48291021
复制相似问题