Python的:如何导入所有的变量?(Python: How can I import all va

2019-06-25 01:31发布

我是新来的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!

Answer 1:

你给了自己的解决方案: from a import *会工作得很好。 Python没有这方面的函数和变量之间进行区分。

>>> from a import *
>>> if name == "Michael" and age == 15:
...     print('Simple!')
...
Simple!


Answer 2:

只是一些方面,多数棉短绒将标记from module import *一个警告,因为它容易出现命名空间冲突,这将导致头痛的道路。

没有人注意到然而这,作为替代,您可以使用

from a import name, age

表单,然后使用nameage直接(不带a.前缀)。 在from [module] import [identifiers]形式更面向未来的,因为你可以很容易地看到,当一个进口将覆盖另一个。

另外请注意,“变量”是不是从不同的功能在Python中他们是如何处理的条款-就像每一个标识符namesayBye在某种对象的指向。 标识符name是指向在一个字符串对象, sayBye在函数对象指向,和age在整数对象所指向。 当你告诉Python的:

from a import name, age

你说“走在指出这些对象的nameage模块内的a ,并指向他们具有相同标识符当前范围”。

同样,如果你想在他们与进口不同的标识点,则可以使用

from a import sayBye as bidFarewell

形成。 相同功能的对象被指向,除了在当前范围指向它的标识符是bidFarewell而在模块a指向它的标识符是sayBye



Answer 3:

像其他人说,

from module import *

还将导入模块中的变量。

但是,你要明白,你是不是进口的变量,只是对象的引用。 在引入模块中分配别的东西来导入名称将不会影响其他模块。

例如:假设你有一个模块module.py包含以下代码:

a= 1
b= 2

然后你有其他的两个模块, mod1.pymod2.py这既做到以下几点:

from module import *

在每个模块中,两个名字, ab的创建,指向对象12 ,分别。

现在,如果某处mod1.py你指定别的东西来全局名称a

a= 3

名称amodule.py和名字amod2.py仍将指向对象1

所以, from module import *会工作,如果你想只读全局,但如果你想读-写全局将无法正常工作。 如果是后者,你最好还是只导入import module ,然后或者所获得的价值( module.a )或设定值( module.a= … )由模块前缀。



Answer 4:

你没有直接这样说,但我假设你遇到与操作这些全局变量的麻烦。

如果你从一个函数内部操纵全局变量,你必须声明它们的全球

a = 10
def x():
   global a
   a = 15

print a
x()
print a

如果你不这样做,那么a = 15将只创建一个局部变量,并为其分配15,而全球一撑10



文章来源: Python: How can I import all variables?