假设有两个函数,我希望func2返回func1的结果,但是如果func1的结果为None,则返回其他结果。有两种方法可以实现这个功能,但它们都有些不太对。
第一种方法:
def func1(n):
if (condition):
return foo
def func2(n):
if func1(n) is not None:
return func1(n)
else:
return something_else
但是这样做感觉不太对,因为我需要连续调用 func1(n) 两次(而且 func1(n) 是一个相对耗费计算资源的函数)。为了避免这种情况,我可以这样写:
def func1(n):
if (condition):
return foo
def func2(n):
foo = func1(n)
if foo is not None:
return foo
else:
return something_else
但这感觉不太对,因为我不认为我应该分配一个新变量,这个变量永远不会再被使用,只是为了检查 func1 返回的是否为 None。
有没有更简单的方法可以做到这一点,而无需调用两次 func1,也不需要创建新变量?如果这确实是唯一的方法,你会推荐哪种方式?我目前使用第二种方式(将 foo 设置为 func1 返回的内容,然后返回 foo,除非 foo == None)
另外,请记住,在我的实际代码中,我调用多个不同的函数,并且我想返回第一个不是 None 的函数,这只是一个更简单的代码版本,以达到问题的效果。
None
这样的单例,应该使用is
和is not
而不是==
和!=
。请参考此处:https://dev59.com/6HE95IYBdhLWcg3wrPwn - TheSoundDefense== True
;if condition:
就足够了,而且更不容易出错(因为比较链,如果添加其他比较,你很可能会产生错误的表达式)。 - Martijn Pietersisinstance
。 - blakev