Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果不是“无”,则返回昂贵的函数调用_Python - Fatal编程技术网

Python 如果不是“无”,则返回昂贵的函数调用

Python 如果不是“无”,则返回昂贵的函数调用,python,Python,我有一个昂贵的函数bt。我需要返回bt(x,y,carries,n)的值,前提是它不是None(或者==False,无论什么)。我现在是这样做的: foo = bt(x, y, carries, n) if foo: return foo 这太傻了。另一方面,我不想不必要地给bt打两次电话,因为它非常昂贵。如何在不影响性能的情况下优雅地表达这一点? (我正在使用Python2.7.6,但我对Python3的答案也很感兴趣)。假设当bt返回None时还有更多的事情要做(否则会有一个隐式N

我有一个昂贵的函数
bt
。我需要返回
bt(x,y,carries,n)
的值,前提是它不是
None
(或者
==False
,无论什么)。我现在是这样做的:

foo = bt(x, y, carries, n)
if foo:
    return foo
这太傻了。另一方面,我不想不必要地给bt打两次电话,因为它非常昂贵。如何在不影响性能的情况下优雅地表达这一点?
(我正在使用Python2.7.6,但我对Python3的答案也很感兴趣)。

假设当
bt
返回
None
时还有更多的事情要做(否则会有一个隐式
None
返回)

除了为返回值使用一个有意义的名称之外,您已经拥有的是执行此操作的首选方法

bt_retval = bt(x, y, carries, n)
if bt_retval is not None:
    return bt_retval
del bt_retval # optional (it really isn't wasting much memory)
# otherwise carry on

你为什么认为这很愚蠢?如果没有更好的方法,那也不愚蠢。但我认为有。“但我认为有。”你怎么会这么想?您只希望有时返回一个值。这正是您的代码片段所做的。你建议的替代方案并不优雅。除了浪费,它还违反了DRY。@RenéG代码副本从来都不是优雅的,所以它不会。Python不会为您优化任何东西。@RenéG:如果函数是纯函数,您可以对其进行记忆(例如,使用lru_缓存),这样计算只需执行一次。但是我不认为仅仅为了避免
if-foo:return-foo