Python:如何导入所有变量?

35 python variables import module

我是Python和编程的新手(最多几周).

关于Python和使用模块,我意识到函数可以使用导入from a import *.

所以不要打字

a.sayHi()
a.sayBye()
Run Code Online (Sandbox Code Playgroud)

我可以说

sayHi()
sayBye()
Run Code Online (Sandbox Code Playgroud)

我觉得它简化了很多东西.现在,假设我有一堆变量,我想在模块中使用它们,我将它们全部定义在一个python模块中.我怎样才能使用上面提到的类似方法或同样简单的方法导入这些变量.我不想使用import a然后被要求为我的所有变量添加前缀a..

理想情况如下:

a.py

name = "Michael"
age = 15
Run Code Online (Sandbox Code Playgroud)

b.py

some_function

if name == "Michael":
    if age == 15:
        print("Simple!") 
Run Code Online (Sandbox Code Playgroud)

输出:

Simple!
Run Code Online (Sandbox Code Playgroud)

Ste*_*202 63

你自己给出了解决方案:from a import *工作得很好.Python在这方面没有区分函数和变量.

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

  • 什么??很多'他们!如果该函数想要改变`name`的值,那么必须在函数内声明`global name`? (8认同)
  • 这给了我警告:“from module import *”使用无法检测未定义的名称。 (2认同)

cdl*_*ary 34

仅仅针对某些情况,大多数短信都会标记from module import *警告,因为它容易发生名称空间冲突,这会导致头痛.

没有人注意到,作为替代方案,你可以使用

from a import name, age
Run Code Online (Sandbox Code Playgroud)

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

另请注意,"变量"与Python中的函数没有区别,因为它们的处理方式如何 - 每个标识符都喜欢namesayBye指向某种对象.标识符name指向一个字符串对象,sayBye指向一个函数对象,并age指向一个整数对象.当你告诉Python时:

from a import name, age
Run Code Online (Sandbox Code Playgroud)

你说的是" 在模块内nameage模块内指向那些对象,并a使用相同的标识符在当前范围内指向它们".

同样,如果要在导入时使用不同的标识符指向它们,则可以使用

from a import sayBye as bidFarewell
Run Code Online (Sandbox Code Playgroud)

形成.指向相同的函数对象,除了在当前作用域中指向它的标识符,bidFarewell而在模块a中指向它的标识符是sayBye.


tzo*_*zot 13

像其他人说的那样,

from module import *
Run Code Online (Sandbox Code Playgroud)

还将导入模块变量.

但是,您需要了解您不是导入变量,只是对对象的引用.在导入模块中为导入的名称分配其他内容不会影响其他模块.

示例:假设您有一个module.py包含以下代码的模块:

a= 1
b= 2
Run Code Online (Sandbox Code Playgroud)

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

from module import *
Run Code Online (Sandbox Code Playgroud)

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

现在,如果mod1.py您在某个地方为全局名称指定了其他内容a:

a= 3
Run Code Online (Sandbox Code Playgroud)

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

因此,from module import *如果你想要只读全局变量,那么它将起作用,但如果你想要读写全局变量,它将不起作用.如果是后者,你最好只是导入import module,然后获取值(module.a)或设置module.a= …模块前缀的值().


has*_*sen 8

你没有直接这么说,但我假设你在操纵这些全局变量时遇到了麻烦.

如果从函数内部操作全局变量,则必须将它们声明为全局变量

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

print a
x()
print a
Run Code Online (Sandbox Code Playgroud)

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