我想编写一个代码,该代码将检查字典中的键,如果存在则将其设置为函数作为参数。
def myFunction(*args, **kwargs):
# do stuffs
if('name' in kwargs):
thisTitle = kwargs.pop('name')
print(thisTitle)
...
return thisTitle
t = {}
if 'name' in t.keys()
and 'param1' in t.keys()
and 'param2' in t.keys():
res = myFunction(name = t['name'],
myparam1 = t['param1'],
secondPar = t['param2'])
elif 'name' in t.keys()
and 'param1' in t.keys():
res = myFunction(name=t['name'],
myparam1=t[param1])
elif 'name' in t.keys():
res = myFunction(name=t['name'])
如果我有10个参数怎么办?必须有更好的方法。
答案 0 :(得分:2)
尝试一下:
def myFunction(*args, **kwargs):
# do stuffs
if('name' in kwargs):
thisTitle = kwargs.pop('name')
print(thisTitle)
if('param1' in kwargs):
print(kwargs['param1'])
if('param2' in kwargs):
print(kwargs['param2'])
# ...
return thisTitle
t = {'name': "same_name"}
myFunction(**t)
t = {'name': 'same_name',
'param1': 'val1',
'param2': 'val2'}
myFunction(**t)
输出:
$ python3 stack.py
same_name
same_name
val1
val2
答案 1 :(得分:0)
我还建议在default
上使用pop
参数,而不要检查是否存在:thisTitle = kwargs.pop('name', default)
;因此您不会同时使用in
和pop
。
if('name' in kwargs):
thisTitle = kwargs.pop('name')
成为:
thisTitle = kwargs.pop('name', None)
使用get
而不是pop
可能更好,除非从字典中删除键是必需的效果:
thisTitle = kwargs.get('name', None)
然后,当未提供None
关键字参数时,您的函数将返回NameError
而不是生成name
。