Когда я могу передать *
и **
в аргументе функции Python? т.е .:Когда использовать * и ** как аргумент функции в функции python
def fun_name(arg1, *arg2 , ** arg3):
Когда я могу передать *
и **
в аргументе функции Python? т.е .:Когда использовать * и ** как аргумент функции в функции python
def fun_name(arg1, *arg2 , ** arg3):
Как вы заявили, ваш вопрос, вы не используете их в аргументах (которые возникают, когда вы используете , вызывая функцию a), вы используете их в параметрах, которые возникают, когда вы находитесь , создавая - функция. Операторы *
и **
служат для разных целей в каждой из этих ситуаций.
Когда вы находитесь , определяя функцию, они указывают, что позиционные аргументы будут помещены в кортеж, а аргументы ключевого слова будут помещены в dict. Да, я просто сказал аргументы, но в этом случае они применяются к параметрам.
def example(*args, **kwargs):
print "args: {0}".format(args)
print "kwargs: {0}".format(kwargs)
example(1, 2, 'a', foo='bar', bar='foo')
при запуске, это выходы:
args: (1, 2, 'a')
kwargs: {'foo': 'bar', 'bar': 'foo'}
Вы видите, что я имею в виду, когда я говорю, что мы применили его к PARAMATERS в определении функции? аргументы 1, 2, 'a', foo='bar', bar='foo'
. параметрами являются *args, **kwargs
.
Теперь вот пример применения их к аргументам.
def example2(a, b, foo=None, bar=None):
print "a: {0}, b:{1}, foo:{2}, bar: {3}".format(a, b, foo, bar)
args = (1, 2)
kwargs = {'foo': 'bar', 'bar': 'foo'}
example2(*args, **kwargs)
Это выходы:
a: 1, b:2, foo:bar, bar: foo
Вы можете видеть, что, когда мы применяем их к аргументам (то есть, когда мы вызываем функцию), *
имеет эффект расширения списка или кортежа для заполнения позиционные аргументы функции и **
приводят к расширению словаря для заполнения аргументов ключевого слова для функции. Вам просто нужно убедиться, что после того, как расширения были сделаны, есть достаточно и не слишком много аргументов.
в последнем примере, аргументы *args, **kwargs
и параметры a, b, foo=None, bar=None
Каждый раз, когда вы хотите, чтобы ваша функция, чтобы принять неименованных позиционные аргументы (*
), или дополнительные именованные аргументы (**
).
В каждом определении функции можно включить *args, **kwargs
, хотя это может и не быть отличной идеей, если передача большего количества аргументов фактически не будет иметь никакого эффекта.
Когда я могу передать * и ** в аргументе функции Python? то есть:
Короткий ответ: когда вам требуется переменное количество аргументов, передаваемых вашей функции.
Это, я честно считаю, что это очень широкий вопрос. Вам будет намного лучше читать больше об этих концепциях, пробовать их, а затем задавать конкретные вопросы здесь.
@ Wooble's answer поможет вам; но что поможет вам еще больше понять, что делают *args
и **kwargs
. Затем вы можете использовать их в соответствии с ситуациями, с которыми вы сталкиваетесь.
Вы можете узнать больше о концепции переменных и ключевые аргументы, например, по адресу:
Вы читали это? http://docs.python.org/reference/compound_stmts.html#function-definitions –