указатель в питоне? - PullRequest
       4

указатель в питоне?

2 голосов
/ 07 июня 2011

Когда я пытался выяснить использование imp.load_module в Python, я получил следующий код ( 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 ]

7 голосов
/ 07 июня 2011

* в начале, если 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

4 голосов
/ 07 июня 2011

Я предполагаю, что вы говорите о линии _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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...