如何在Python中像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中该怎么做呢?
5 个回答
无论如何,下面是这些语句和函数的工作原理:
import X
是用来导入模块X的,它会在当前的命名空间中创建一个对这个模块的引用。换句话说,运行这个语句后,你可以用X.name
来访问模块X中定义的内容。
from X import *
是用来导入模块X的,它会在当前的命名空间中创建对模块中所有公共对象的引用(也就是说,所有名字不以“_”开头的东西)。换句话说,运行这个语句后,你可以直接用简单的名字来访问模块X中的内容。但注意,X本身并没有被定义,所以X.name
是不能用的。如果名字已经被定义了,它会被新的版本替换掉。而且如果X中的名字指向了其他对象,你的模块是不会察觉到的。
from X import a, b, c
是用来导入模块X的,它会在当前的命名空间中创建对指定对象的引用。换句话说,现在你可以在程序中使用a
、b
和c
了。最后,
X = __import__(‘X’)
的工作方式和import X
一样,只是有两个不同之处:1)你把模块名作为字符串传递,2)你明确地将它赋值给当前命名空间中的一个变量。
顺便说一下,这就是你感兴趣的最后一种方法。
简单地写(例如):
var = "datetime"
module = __import__(var)
这是个老帖子,但我需要这个答案,所以可能还有其他人也需要...
在Python 2.7及以上版本中,有一种更简洁的方法来做到这一点:
import importlib
my_module = importlib.import_module("package.path.%s" % module_name)
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