Reputation: 723
When I was trying to figure out the use of imp.load_module in Python, I got the following code (origin page). It's my first time seeing the use of * in Python, is that some pointer like things?
thanks in advance
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
Upvotes: 2
Views: 736
Reputation: 1
Essentially, they are variables that hold the memory address of another variable.
Upvotes: 0
Reputation: 44161
The *
on front if info
causes the list / tuple to be unwrapped into individual arguments to the function. You can read more about unpacking here in the python documentation. this can also be done with dictionaries for named arguments, see here
For example,
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)
Output:
1 2 3 4
EDIT:
According to comments to your question by jcomeau_ictx, the operator is called splat
Upvotes: 7
Reputation: 37461
I'm assuming you're talking about the _client = imp.load_module(modname, *info)
line.
No, it's not a pointer. It expands the list passed in as an argument. Here's an example:
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
There's similar expansion possible for dictionaries.
In [12]: d = {'bar': 1, 'baz': 2}
In [13]: foo(**d)
Out[13]: 3
Upvotes: 4