从另一个文件导入变量?
- 2025-02-12 10:04:00
- admin 原创
- 49
问题描述:
如何将变量从一个文件导入到另一个文件?
例如:file1
有变量x1
以及x2
如何将它们传递给file2
?
我如何将所有变量从一个变量导入到另一个变量?
解决方案 1:
from file1 import *
将导入 file1 中的所有对象和方法
解决方案 2:
导入file1
内部file2
:
要从 file1 导入所有变量而不淹没 file2 的命名空间,请使用:
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 原本具有的一个重要属性 — 您可以通过您最喜欢的编辑器中的简单“搜索”功能知道每个顶层名称的定义位置。如果某个模块增加了额外的函数或类,您也会在将来遇到麻烦。
解决方案 3:
最好明确导入x1和x2:
from file1 import x1, x2
这使得您可以避免在file1
工作时与变量和函数发生不必要的命名空间冲突file2
。
但如果你确实想要,你可以导入所有变量:
from file1 import *
解决方案 4:
实际上,这与导入变量的方式并不完全相同:
from file1 import x1
print(x1)
和
import file1
print(file1.x1)
虽然在导入时 x1 和 file1.x1 具有相同的值,但它们不是相同的变量。例如,调用 file1 中修改 x1 的函数,然后尝试从主文件打印该变量:您将看不到修改后的值。
解决方案 5:
first.py:
a=5
second.py:
import first
print(first.a)
结果将为 5。
解决方案 6:
脚本1.py
title="Hello world"
script2.py是我们使用 script1 变量的地方
方法 1:
import script1
print(script1.title)
方法 2:
from script1 import title
print(title)
解决方案 7:
Marc 的回答是正确的。实际上,您可以打印变量的内存地址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)))
解决方案 8:
我发现执行一个声明了要使用的变量的文件会将它们加载到内存中。但有一个问题是它会执行文件中的所有命令,因此如果您只想要变量,则需要文件仅声明变量。以下是一个例子:
文件1:
a=1
b=3
文件2:
with open("File1.py") as file:
exec(file.read())
c = a+b
print(c)
输出:4
我是 Python 新手,所以不知道这样做是否会有其他问题,但我认为这是一件有趣的事情,值得分享。
解决方案 9:
如果您需要从同一级别或以下的目录导入变量,则可以使用import_module
来自项目的 cwd:
from importlib import import_module
mod = import_module(
f"{cwd}.source.myfolder.myfile"
)
var = getattr(mod, "my_variable")