我实际上已经尝试理解 Python 导入大约一年了,我几乎放弃了 Python 编程,因为它看起来太混乱了。我有 C 语言背景,我认为import
工作就像#include
,但是如果我尝试导入某些内容,我总是会遇到错误。
如果我有两个这样的文件:
foo.py:
a = 1
bar.py:
import foo
print foo.a
input()
为什么我需要引用模块名称?为什么不能够写import foo
, print a
?这种混乱有什么意义呢?为什么不直接运行代码并为您定义一些内容,就好像您将其编写在一个大文件中一样?为什么它不能像 C 的 #include 指令那样工作,它基本上是复制和粘贴代码?我在 C 中没有导入问题。
为了做你想做的事,你可以使用(不推荐,进一步阅读解释):
from foo import *
这会将所有内容导入到您当前的命名空间中,您将能够调用print a
.
然而,这种方法存在以下问题。考虑一下当你有两个模块时的情况,moduleA
and moduleB
,每个都有一个名为的函数GetSomeValue()
。
当你这样做时:
from moduleA import *
from moduleB import *
您有命名空间解析问题*,因为您实际调用的函数是什么GetSomeValue()
, the moduleA.GetSomeValue()
or the moduleB.GetSomeValue()
?
除此之外,您还可以使用Import As
特征:
from moduleA import GetSomeValue as AGetSomeValue
from moduleB import GetSomeValue as BGetSomeValue
Or
import moduleA.GetSomeValue as AGetSomeValue
import moduleB.GetSomeValue as BGetSomeValue
此方法手动解决冲突。
我相信您可以从这些示例中体会到显式引用的必要性。
* Python 有其名称空间解析机制,这只是出于解释目的的简化。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)