Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 名称冲突使用';从导入';我可以';是否不使用导入的变量?_Python - Fatal编程技术网

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
应该是什么(即使它有一个更有意义的名称)