Python中的指针?

2 投票
3 回答
728 浏览
提问于 2025-04-16 19:06

当我在尝试理解Python中如何使用imp.load_module时,我看到了以下代码(原始页面)。这是我第一次看到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

3 个回答

0

简单来说,它们就是用来存储另一个变量的内存地址的变量。

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
7

info前面的*符号可以把列表或元组里的内容拆开,变成一个个单独的参数传给函数。想了解更多关于拆包的内容,可以查看这里的Python文档。对于字典中的命名参数,也可以用类似的方法,具体可以看这里

举个例子:

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

撰写回答