Мне также нужно иметь возможность указывать значения по умолчанию для аргументов ключевых слов.
Если аргумент был указан в вызове, он будет вести себя одним образом; если этот аргумент не был указан в вызове, а вместо этого был взят из значения по умолчанию, он будет использовать значение по умолчанию и вести себя по-другому.
У меня есть работающее решение, но мне интересно, есть ли более чистый, безопасный и краткий способ достижения цели:
Код: Выделить всё
import json
def addFeature(*args,**kwargs):
defaults={
'p1':1,
'p2':2,
'p3':3
}
mergedKwargs = defaults | kwargs # start with defaults; overwrite with any specified kwargs items
print(f'args:{args}')
print('keyword arguments specified in the call to this function:')
print(json.dumps(kwargs,indent=3))
print('mergedKwargs:')
print(json.dumps(mergedKwargs,indent=3))
# unpack to local variables
(p1,p2,p3)=(mergedKwargs[k] for k in ('p1','p2','p3'))
print(f'local values: p1={p1} p2={p2} p3={p3}')
addFeature(1,2,p1=5)
addFeature(3,4,p2=7,p3=9)
Код: Выделить всё
PS C:\Users\caver\Documents\GitHub> python argsTest.py
call to addFeature: args: (1, 2)
keyword arguments specified in the call to this function:
{
"p1": 5
}
mergedKwargs:
{
"p1": 5,
"p2": 2,
"p3": 3
}
local values: p1=5 p2=2 p3=3
call to addFeature: args: (3, 4)
keyword arguments specified in the call to this function:
{
"p2": 7,
"p3": 9
}
mergedKwargs:
{
"p1": 1,
"p2": 7,
"p3": 9
}
local values: p1=1 p2=7 p3=9
PS C:\Users\caver\Documents\GitHub>
Подробнее здесь: https://stackoverflow.com/questions/798 ... n-while-al
Мобильная версия