Python 名称冲突使用';从导入';我可以';是否不使用导入的变量?
例如:这里有Python 名称冲突使用';从导入';我可以';是否不使用导入的变量?,python,Python,例如:这里有false.py文件和real.py文件。在false.py中: a = 'fake a' b = 'fake b' from fake import* a = 'real a' print(a,b) 在real.py中: a = 'fake a' b = 'fake b' from fake import* a = 'real a' print(a,b) 然后打印出:真a假b 为什么会这样? 如果我想在false.py中使用a,该怎么办? 我必须使用导入假和假.a '模块内
false.py
文件和real.py
文件。在false.py
中:
a = 'fake a'
b = 'fake b'
from fake import*
a = 'real a'
print(a,b)
在real.py
中:
a = 'fake a'
b = 'fake b'
from fake import*
a = 'real a'
print(a,b)
然后打印出:真a假b
为什么会这样?如果我想在
false.py
中使用a
,该怎么办?我必须使用
导入假
和假.a
'模块内的语句(本例中为假?)仅在第一次导入模块时执行'
这是什么意思
我是编程新手,请帮助我,谢谢。远离
某些模块导入*
,因为您将该模块中的所有名称导入到当前模块命名空间中
在“名称冲突”的情况下,这将不仅覆盖以前定义的任何名称,而且正如您所看到的,它们也可能被覆盖
为什么呢 在您的案例中,来自伪导入的
*
大致相当于:
# 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)
因此,难怪“假a”
无法访问(或打印)
我必须使用
导入假
和假.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
导入特定名称(也可以使用别名):
至于 如果我想在
false.py
中使用a
,该怎么办
应该没有问题,因为在false.py中没有导入,所以那里没有名称冲突。问题
您正在从fake.py(a&b)导入两个全局变量,然后为其中一个(a)指定一个新值
解决方案
如果你想使用fake.a和fake.b,那么就去掉import指令中的*。使用此导入指令:
import fake
然后,您将能够使用此表单访问a&b变量
fake.a
fake.b
然后不要使用来自模块导入的*
请参见是,这就是为什么不应该使用来自模块导入的*
为了增加乐趣,请将来自假导入的顺序与a='real a'
交换。然后想象一下,你有10000行代码,这些代码埋在里面的某个地方,你如何跟踪a
应该是什么(即使它有一个更有意义的名称)