例如:这里我有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
吗?
模块中的这是什么意思?'语句(本例中为假?)仅在第一次导入模块时执行'
我是编程新手请帮忙谢谢。
答案 0 :(得分:4)
远离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
中没有导入,因此没有名称冲突。
答案 1 :(得分:1)
您正在从fake.py(a& b)导入两个全局变量,然后为其中一个(a)分配一个新值。
如果你想使用fake.a和fake.b然后去掉import指令中的*。使用此导入指令:
fake.a
fake.b
然后您就可以访问a& b带有此形式的变量
if len(rowdata) > 0:
dataSet.append(rowdata)