传递函数将忽略的参数
pass a parameter which the function will ignore
假设我们有一个带有签名的简单 python 函数:
def foo(first, second, third=50)
当我从我的 main
调用它时,我总是有第一个和第二个参数,但我并不总是有第三个。
当我尝试从我使用的字典中获取第三个时:third = dict['value'] if 'value' in dict.keys() else None
问题是,当我传递这个 None
时,我希望函数使用其默认的第三个参数并且为 50,但它只使用 None
。我也用 []
.
试过了
有没有更优雅的方法来做到这一点,除了调用函数两次,取决于third
是否存在,一次有它,一次没有,如下?
third = dict['value'] if 'value' in dict.keys() else None
if third:
foo(first, second, third)
else:
foo(first, second)
尝试:
if dict.get('value'):
def foo(first, second, third)
else:
def foo(first, second)
像这样重新定义函数怎么样:
def foo(first, second, third):
if third == None:
third = 50
""" Your code here """
或
third = dict['value'] if 'value' in dict.keys() else 50
你可以这样做:
kwargs = {'third': dict['value']} if 'value' in dict else {}
foo(first, second, **kwargs)
第一行创建一个 kwargs
字典,如果 dict
中有 value
,它只包含一个关键字 third
,否则它是空的。在调用该函数时,您可以传播那个 kwargs
字典。
Python 中的函数对象有一个特殊的 属性 __defaults__
。它是一个具有默认参数值的元组。因此,您可以从那里轻松获得 third
的默认值:
def foo(first, second, third=50):
return third
dict = {}
print(foo(10, 20, dict.get('value', foo.__defaults__[0]))) # prints 50
dict = {"value": 100}
print(foo(10, 20, dict.get('value', foo.__defaults__[0]))) # prints 100
您可以使用列表理解对参数进行分组:
def foo(first,second,third=50):
print(first,second,third)
args=[ a for a in [10,20,d.get("third",None)] if a!=None ]
foo(*args)
10 20 50
我今天遇到了类似的问题。调用您的函数时,请执行以下操作:
foo(first, second, third=50)
third应该这样传的时候取值
您可以查看第三次通过的内容
if None in third:
# do this
else:
# do something else
假设我们有一个带有签名的简单 python 函数:
def foo(first, second, third=50)
当我从我的 main
调用它时,我总是有第一个和第二个参数,但我并不总是有第三个。
当我尝试从我使用的字典中获取第三个时:third = dict['value'] if 'value' in dict.keys() else None
问题是,当我传递这个 None
时,我希望函数使用其默认的第三个参数并且为 50,但它只使用 None
。我也用 []
.
有没有更优雅的方法来做到这一点,除了调用函数两次,取决于third
是否存在,一次有它,一次没有,如下?
third = dict['value'] if 'value' in dict.keys() else None
if third:
foo(first, second, third)
else:
foo(first, second)
尝试:
if dict.get('value'):
def foo(first, second, third)
else:
def foo(first, second)
像这样重新定义函数怎么样:
def foo(first, second, third):
if third == None:
third = 50
""" Your code here """
或
third = dict['value'] if 'value' in dict.keys() else 50
你可以这样做:
kwargs = {'third': dict['value']} if 'value' in dict else {}
foo(first, second, **kwargs)
第一行创建一个 kwargs
字典,如果 dict
中有 value
,它只包含一个关键字 third
,否则它是空的。在调用该函数时,您可以传播那个 kwargs
字典。
Python 中的函数对象有一个特殊的 属性 __defaults__
。它是一个具有默认参数值的元组。因此,您可以从那里轻松获得 third
的默认值:
def foo(first, second, third=50):
return third
dict = {}
print(foo(10, 20, dict.get('value', foo.__defaults__[0]))) # prints 50
dict = {"value": 100}
print(foo(10, 20, dict.get('value', foo.__defaults__[0]))) # prints 100
您可以使用列表理解对参数进行分组:
def foo(first,second,third=50):
print(first,second,third)
args=[ a for a in [10,20,d.get("third",None)] if a!=None ]
foo(*args)
10 20 50
我今天遇到了类似的问题。调用您的函数时,请执行以下操作:
foo(first, second, third=50)
third应该这样传的时候取值
您可以查看第三次通过的内容
if None in third:
# do this
else:
# do something else