我是新来的Python和通用编程(最多一两个星期)。
关于Python和使用的模块,我认识到,功能可通过进口from a import *
。
因此,而不是打字
a.sayHi()
a.sayBye()
我可以说
sayHi()
sayBye()
我觉得这简化事情很多。 现在,假设我有一堆的,我想跨模块使用的变量 ,我把它们都在一个Python模块定义。 如何可以使用类似的方法如上述或同样简单一个提到的,导入这些变量。 我不想使用import a
,然后要求我的前缀与所有变量的a.
。
以下情况将被理想:
a.py
name = "Michael"
age = 15
b.py
some_function
if name == "Michael":
if age == 15:
print("Simple!")
输出:
Simple!
你给了自己的解决方案: from a import *
会工作得很好。 Python没有这方面的函数和变量之间进行区分。
>>> from a import *
>>> if name == "Michael" and age == 15:
... print('Simple!')
...
Simple!
只是一些方面,多数棉短绒将标记from module import *
一个警告,因为它容易出现命名空间冲突,这将导致头痛的道路。
没有人注意到然而这,作为替代,您可以使用
from a import name, age
表单,然后使用name
和age
直接(不带a.
前缀)。 在from [module] import [identifiers]
形式更面向未来的,因为你可以很容易地看到,当一个进口将覆盖另一个。
另外请注意,“变量”是不是从不同的功能在Python中他们是如何处理的条款-就像每一个标识符name
或sayBye
在某种对象的指向。 标识符name
是指向在一个字符串对象, sayBye
在函数对象指向,和age
在整数对象所指向。 当你告诉Python的:
from a import name, age
你说“走在指出这些对象的name
和age
模块内的a
,并指向他们具有相同标识符当前范围”。
同样,如果你想在他们与进口不同的标识点,则可以使用
from a import sayBye as bidFarewell
形成。 相同功能的对象被指向,除了在当前范围指向它的标识符是bidFarewell
而在模块a
指向它的标识符是sayBye
。
像其他人说,
from module import *
还将导入模块中的变量。
但是,你要明白,你是不是进口的变量,只是对象的引用。 在引入模块中分配别的东西来导入名称将不会影响其他模块。
例如:假设你有一个模块module.py
包含以下代码:
a= 1
b= 2
然后你有其他的两个模块, mod1.py
和mod2.py
这既做到以下几点:
from module import *
在每个模块中,两个名字, a
和b
的创建,指向对象1
和2
,分别。
现在,如果某处mod1.py
你指定别的东西来全局名称a
:
a= 3
名称a
在module.py
和名字a
在mod2.py
仍将指向对象1
。
所以, from module import *
会工作,如果你想只读全局,但如果你想读-写全局将无法正常工作。 如果是后者,你最好还是只导入import module
,然后或者所获得的价值( module.a
)或设定值( module.a= …
)由模块前缀。
你没有直接这样说,但我假设你遇到与操作这些全局变量的麻烦。
如果你从一个函数内部操纵全局变量,你必须声明它们的全球
a = 10
def x():
global a
a = 15
print a
x()
print a
如果你不这样做,那么a = 15
将只创建一个局部变量,并为其分配15,而全球一撑10