簡體   English   中英

如何應用functools.lru_cache來使用可變參數進行操作?

[英]How to apply functools.lru_cache to function with mutable parameters?

我有一個函數,其中一個參數為numpy.ndarray。 它是可變的,所以它不能被lru_cache緩存。

有沒有現成的解決方案?

可能最簡單的方法是記住只接受不可變對象的版本。

假設你的函數需要一個np.array ,讓我們假設它是一個1d數組。 幸運的是,它很容易翻譯成tuple

import numpy as np

a = np.array([1, 2, 3, 4])
>> tuple(a)
(1, 2, 3, 4)

反之亦然:

>> np.array(tuple(a))
array([1, 2, 3, 4])

所以你得到類似的東西

# Function called by the rest of your program
array_foo(a) # `a` is an `np.array`
    ...
    return tuple_foo(tuple(a))

然后記住這個功能:

# Internal implementation
@functools.lru_cache
tuple_foo(t) # `t` is a tuple
    ...
    a = np.array(t)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM