从另一个文件导入变量?


134

如何将变量从一个文件导入到另一个文件?

示例:file1具有变量x1以及x2如何将其传递给file2

如何将所有变量从一个导入到另一个?

Answers:


146
from file1 import *  

将导入file1中的所有对象和方法


53
请注意,但是,这通常是您不应该做的事情
David Cain 2013年

7
正如David所指出的,这会污染名称空间,并且可能掩盖其他模块(包括标准发行版中的模块)中的对象和功能,从而造成灾难性后果
ennuikiller 2013年

11
我尝试这样做,但似乎python找不到file1,因为我遇到了此错误:ImportError: No module named file1
Hilder Vitor Lima Pereira

4
你有__init__.py档案吗?有关更多详细信息,请参见此处
J0ANMM

76

导入file1内部file2

要从文件1导入所有变量而不泛洪文件2的名称空间,请使用:

import file1

#now use file1.x1, file2.x2, ... to access those variables

要将所有变量从file1导入到file2的命名空间(不推荐):

from file1 import *
#now use x1, x2..

文档

虽然from module import *在模块级别使用是有效的,但通常不是一个好主意。首先,它失去了Python否则具有的重要属性-您可以知道每个顶级名称在您喜欢的编辑器中通过简单的“搜索”功能定义的位置。如果某些模块增加了其他功能或类,将来还会给自己带来麻烦。


1
如果我要传递1000个变量?
Ofek 2013年

1
@Ofek那就用吧import file1
Ashwini Chaudhary

1
它不导入变量:\
Ofek 2013年

6
它确实会导入变量,尽管您必须file1.varX为每个文件加上前缀。
zmo 2013年

43

最好显式导入x1x2

from file1 import x1, x2

这样可以避免file1在中工作时与变量和函数发生不必要的名称空间冲突file2

但是,如果您确实需要,可以导入所有变量:

from file1 import * 

11

实际上,使用以下命令导入变量并不完全相同:

from file1 import x1
print(x1)

import file1
print(file1.x1)

在导入时,x1和file1.x1的值完全相同,但它们不是相同的变量。例如,在file1中调用一个修改x1的函数,然后尝试从主文件中打印该变量:您将看不到修改后的值。


5

马克的回答是正确的。实际上,您可以打印变量的内存地址,print(hex(id(libvar))并且可以看到地址是不同的。

# mylib.py
libvar = None
def lib_method():
    global libvar
    print(hex(id(libvar)))

# myapp.py
from mylib import libvar, lib_method
import mylib

lib_method()
print(hex(id(libvar)))
print(hex(id(mylib.libvar)))

3

script1.py

title="Hello world"

script2.py是我们使用script1变量的地方

方法1:

import script1
print(script1.title)

方法2:

from script1 import title
print(title)

1

Python您可以访问的其他文件的内容像,就好像它们
是某种库,比起像Java或任何OOP语言基础等语言,这是真的很酷;

这使得可以访问文件的内容或将其导入以对其进行处理或对其进行任何处理;这就是为什么Python高度首选数据科学和机器学习等语言的主要原因;

这是 project structure 这个

我从.env file哪里访问API links秘密密钥和秘密密钥所在的位置。

总体结构:

from <File-Name> import *

0

first.py:

a=5

second.py:

import first
print(first.a)

结果将是5。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.