当我试图弄清楚在Python中使用imp.load_module时,我得到了以下代码(origin page)。这是我第一次看到在Python中使用*,有些像指针一样?
提前致谢
import imp
import dbgp
info = imp.find_module(modname, dbgp.__path__)
_client = imp.load_module(modname, *info)
sys.modules["_client"] = _client
from _client import *
del sys.modules["_client"], info, _client
答案 0 :(得分:7)
如果*
导致列表/元组被解包为函数的各个参数,则前面的info
。您可以在python文档中阅读有关解压缩here的更多信息。这也可以使用命名参数的字典来完成,请参阅here
例如,
def do_something(a,b,c,d):
print("{0} {1} {2} {3}".format(a,b,c,d))
a = [1,2,3,4]
do_something(*a)
输出:
1 2 3 4
编辑:
根据jcomeau_ictx对您的问题的评论,该运营商被称为splat
答案 1 :(得分:4)
我假设你在谈论_client = imp.load_module(modname, *info)
行。
不,这不是指针。它扩展了作为参数传入的列表。这是一个例子:
In [7]: def foo(bar, baz):
...: return bar + baz
...:
In [8]: l = [1,2]
In [9]: foo(l)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/Daenyth/<ipython console> in <module>()
TypeError: foo() takes exactly 2 arguments (1 given)
In [10]: foo(*l)
Out[10]: 3
字典也有类似的扩展。
In [12]: d = {'bar': 1, 'baz': 2}
In [13]: foo(**d)
Out[13]: 3