У меня есть функция, которая занимает много параметров, и так как я не хочу, чтобы помнить свои позиции, я решил использовать именованные аргументыИспользовать глобальные переменные в качестве значений по умолчанию
def f(a=None, b=None, c=None):
print a,b,c
f('test', c=5, b='second param')
>>> test second param 5
сейчас, как правило, я только изменить один параметр за один раз, поэтому я хочу вызвать эту функцию, только набрав f (c = 3.14), при этом предполагаемый результат будет f (a = a, b = b, c = 3.14), а именно каждый аргумент, который явно не передан, должен считываться из локальной области.
Но, конечно, он не работает, поскольку использовать именованные аргументы, я должен установить значение по умолчанию, если я использую ** kwargs вместо этого, он просто игнорирует аргументы
def f(**kwargs):
print a,b,c
a=1; b=2; c=3
f(a=2, b=4, c=8)
>>> 1 2 3 # instead of 2 4 8
Я использовал, чтобы определить новую функцию для каждого параметра, но я не люблю этот подход, хотя он был наиболее эффективным до сих пор
def fc(c_new):
return f(a, b, c_new)
Как мне сделать функцию использовать переменные в текущей области в качестве значения по умолчанию для своих именованных аргументов?
Вы не используете ключевые аргументы в функции! – volcano
@volcano В этом суть. – BartoszKP
Все аргументы функции имеют имена. Я думаю, вы имеете в виду аргументы ключевых слов. – martineau