Непонятный синтаксис в Python - передача переменных в качестве аргументов - PullRequest
0 голосов
/ 29 апреля 2020

Я нигде не могу найти, почему использовать и есть ли различия между этими 2 вызовами:

someFunction(10)

и

someFunction(x=10)

Ответы [ 4 ]

1 голос
/ 29 апреля 2020

Ваш первоначальный вызов функции использует позиционный аргумент, т. Е. Он будет соответствовать '10' с первым параметром аргумента.

Однако, если вы явно вызываете функцию с ключевым словом аргумент, он будет соответствовать значению с указанным ключевым словом.

def kwarg_func(x = 5, y = 10, z = 2):
    return x * y * z

# will return 200 (10 * 10 * 2)
print(kwarg_func(10))
# will return 10 (5 * 1 * 2)
print(kwarg_func(y = 1))
# will throw an error since keyword 'a' is undefined
print(kwarg_func(a = 1))
0 голосов
/ 29 апреля 2020

имеет большое значение args и kwargs. Прежде всего 10 - это arg (аргумент), а x=10 (аргумент ключевого слова) называется kwarg.

. Основное различие c между этими двумя аргументами принимается в следующем порядке: а кваргов нет. kwargs можно указывать в любом порядке.

перед прочтением этого ответа. Надеюсь, у вас есть знания по python аргументам по умолчанию.

def func(a=25, b, c, d=3, e, f=2, g, h=1, i):
    return a * b * c * d * e * f * g * h * i

В этой функции вы можете передать все аргументы или вы можете передать только обязательные аргументы. Существенными аргументами являются b, c, e, g, i

, а аргументами по умолчанию являются a, d, f h. Таким образом, возникает вопрос, как передавать значения только для существенных аргументов.

ответ - kwargs. поскольку для kwargs не имеет значения порядок, в котором мы можем передавать аргументы как func(b=3, c=4, e=2, g=10) или func(c=4, g=10, b=3, e=2), любая комбинация будет работать для этого.

0 голосов
/ 29 апреля 2020

Ваш вопрос немного расплывчат и зависит от конструкции вашей функции.
Предположим, у вас есть функция:

def someFunction(x):
    return x

Затем вы можете вызвать ее через someFunction(10) или someFunction(x=10), пока последнее более многословно, но первого вполне достаточно. Посмотрите args и **kwargs для лучшего понимания, например здесь .

0 голосов
/ 29 апреля 2020

Таким образом, причина, по которой вы действительно передаете x = 10, в том, что это был ** kwarg или если x установлен в переменной

def somefunction(x=5):
    print(x*x)

somefunction(x=10)

Это может привести к в 10 * 10, то есть 100.

Причина этого заключается в том, что Python принимает позиционные аргументы, которые эффективно:

def somefunction(x)
    #dosomestuff

Где x в некоторой функции в позиции 0 для аргументов, которые вы можете передать ему.

Где as:

def somefunction(x=10)
    #dosomestuff

Является аргументом ключевого слова (но вы также можете использовать его позицию)

Позиционный аргумент должен быть перед аргументом ключевого слова.

Учебное пособие python хорошо знакомо с этим: https://docs.python.org/3/tutorial/controlflow.html#defining -функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...