假设我想做以下
def calculate_something_extremally_resource_consuming():
# execute some api calls and make insane calculations
if calculations_sucessfull:
return result
同时在项目的其他地方:
if calculate_something_extremally_resource_consuming():
a = calculate_something_extremally_resource_consuming()
etc...
看起来这个重函数会被调用两次,这真的很糟糕。我能想象的另一种选择:
a = calculate_something_extremally_resource_consuming()
if a:
etc...
也许有一种更优雅的方式?
答案 0 :(得分:3)
functools.lru_cache
有时可以帮助您:
Decorator用一个memoizing callable来包装一个函数,该函数可以保存maxsize最近的调用。当使用相同的参数定期调用昂贵的或I / O绑定函数时,它可以节省时间。
>>> from functools import lru_cache
>>> from time import sleep
>>> @lru_cache()
... def expensive_potato():
... print('reticulating splines...')
... sleep(2)
... return 'potato'
...
>>> expensive_potato()
reticulating splines...
'potato'
>>> expensive_potato()
'potato'
这是Python 3.2中的新功能。如果您使用的是旧Python,则可以轻松编写自己的装饰器。
如果您正在使用类的方法/属性,cached_property
很有用。
答案 1 :(得分:0)
在某些语言中,您可以将变量指定为条件块的一部分,但在Python中则不可能(请参阅Can we have assignment in a condition?)