提问人:skargor 提问时间:7/13/2011 最后编辑:Jeremyskargor 更新时间:11/21/2013 访问量:55625
如何在 Python 中导入变量包,例如在 PHP 中使用变量变量 ($$)?
How do I import variable packages in Python like using variable variables ($$) in PHP?
问:
我想根据用户选择的值导入一些包。
默认值为 :file1.py
from files import file1
如果用户选择,则应为:file2
from files import file2
在 PHP 中,我可以使用变量变量来做到这一点:
$file_name = 'file1';
include($$file_name);
$file_name = 'file2';
include($$file_name);
如何在 Python 中做到这一点?
答:
无论如何,以下是这些语句和函数的工作方式:
import X
导入模块 X,并创建对该模块的引用 在当前命名空间中。或者换句话说,在你运行这个之后 语句,可用于引用模块 X 中定义的内容。X.name
from X import *
导入模块 X,并在 当前命名空间到该模块定义的所有公共对象( 是,所有没有名称以“_”开头的东西)。阿宁 换句话说,在运行此语句后,只需使用 纯名称来引用模块 X 中定义的内容。但 X 本身不是 定义,所以不起作用。如果名称已经定义,它 被新版本取代。如果 X 中的名称更改为 point 对于其他对象,您的模块不会注意到。X.name
from X import a, b, c
导入模块 X,并在 给定对象的当前命名空间。或者换句话说,您可以 现在在您的程序中使用 和 和 。a
b
c
最后,X
= __import__('X')
的工作方式类似于导入 X
,但不同之处在于 您 1) 将模块名称作为字符串传递,以及 2) 显式分配 它复制到当前命名空间中的变量。
顺便说一句,这是你感兴趣的最后一种方法。
只需写(例如):
var = "datetime"
module = __import__(var)
Python 没有直接等同于 PHP 的“变量变量”的功能。要获取“变量变量”的值(或任何其他表达式的值),您可以使用该函数。eval
foo = "Hello World"
print eval("foo")
但是,这不能在语句中使用。import
可以使用 __import__
函数通过变量导入。
package = "os"
name = "path"
imported = getattr(__import__(package, fromlist=[name]), name)
相当于
from os import path as imported
让用户选择要导入的内容可能是一个非常糟糕的主意。包可以在导入时执行代码,因此您实际上允许用户在您的系统上任意执行代码!做这样的事情要安全得多
if user_input == 'file1.py':
from files import file1 as file
elif user_input == 'file2.py':
from files import file2 as file
else:
file = None
print "Sorry, you can't import that file"
旧线程,但我需要答案,所以其他人可能仍然......
在 Python 2.7+ 中,有一种更简洁的方法可以做到这一点:
import importlib
my_module = importlib.import_module("package.path.%s" % module_name)
评论
根据自己的回答:mattjbray
from importlib import import_module
# lookup in a set is in constant time
safe_names = {"file1.py", "file2.py", "file3.py", ...}
user_input = ...
if user_input in safe_names:
file = import_module(user_input)
else:
print("Nope, not doing this.")
例如,节省几行代码,并允许您以编程方式设置,或加载多个模块并将它们分配给字典。safe_names
下一个:PHP中的“$$”是什么
评论