python中的指针?

时间:2011-06-07 15:19:58

标签: python pointers

当我试图弄清楚在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

2 个答案:

答案 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