相关疑难解决方法(0)

记住一个函数,以便在我用Python重新运行文件时不会重置它

我经常在Python中进行交互式工作,涉及一些我不想经常重复的昂贵操作.我通常运行我正在处理的任何Python文件.

如果我写:

import functools32

@functools32.lru_cache()
def square(x):
    print "Squaring", x
    return x*x
Run Code Online (Sandbox Code Playgroud)

我得到这个行为:

>>> square(10)
Squaring 10
100
>>> square(10)
100
>>> runfile(...)
>>> square(10)
Squaring 10
100
Run Code Online (Sandbox Code Playgroud)

也就是说,重新运行文件会清除缓存.这有效:

try:
    safe_square
except NameError:
    @functools32.lru_cache()
    def safe_square(x):
        print "Squaring", x
        return x*x
Run Code Online (Sandbox Code Playgroud)

但是当函数很长时,将它的定义放在一个try块中感觉很奇怪.我可以这样做:

def _square(x):
    print "Squaring", x
    return x*x

try:
    safe_square_2
except NameError:
    safe_square_2 = functools32.lru_cache()(_square)
Run Code Online (Sandbox Code Playgroud)

但感觉非常人为(例如,在没有'@'符号的情况下调用装饰器)

是否有一种简单的方法来处理这个问题,例如:

@non_resetting_lru_cache()
def square(x):
    print "Squaring", x
    return x*x
Run Code Online (Sandbox Code Playgroud)

python decorator memoization lru functools

2
推荐指数
2
解决办法
872
查看次数

标签 统计

decorator ×1

functools ×1

lru ×1

memoization ×1

python ×1