【发布时间】:2014-09-06 02:43:10
【问题描述】:
假设我有 2 个功能。我希望 func2 返回 func1,除非 func1 返回 None,在这种情况下 func2 返回其他内容。有两种方法可以做到这一点,但它们都感觉有点不对。
我可以说:
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 返回的内容,而不是 return foo 除非 foo == None)
另外,请记住,在我的真实代码中,我调用了几个不同的函数,我想返回第一个不是 None 的函数,这只是一个更简单的代码版本,可以解决问题。
【问题讨论】:
-
你应该使用
is和is not而不是==和!=,对于像None这样的单例。所以说文档。 stackoverflow.com/questions/2209755/python-operation-vs-is-not -
请不要使用
== True;if condition:就足够了,而且不容易出错(作为比较链,如果添加其他比较,可能会产生错误的表达式)。 -
另外,如果您要检查类型,请使用
isinstance -
好的,请记住,这不完全是我的代码,而是我编写的更简单的代码,以显示我正在尝试做的事情。
标签: python function return conditional-statements