Tôi nhận đoạn mã sau đây từ trang web của Peter Norvig; đó là một trang trí để cho phép ghi nhớ trên các cuộc gọi hàm (caching các cuộc gọi trước đến hàm để thay đổi đệ quy theo hàm mũ thành một chương trình động đơn giản).Tại sao một dòng trong hàm python này cần thiết? (recoion memoized)
def memo(f):
table = {}
def fmemo(*args):
if args not in table:
table[args] = f(*args)
return table[args]
fmemo.memo = table
return fmemo
Mã hoạt động tốt, nhưng tôi tự hỏi tại sao dòng thứ hai thành dòng cuối cùng là cần thiết. Điều này rõ ràng là một khoảng trống trong kiến thức của tôi về Python, nhưng loại bỏ các dòng và chạy một hàm fibonacci đơn giản, nó vẫn có vẻ làm việc. Điều này có liên quan đến việc ghi nhớ nhiều chức năng cùng lúc không? Tại sao biến thành viên của fmemo được gọi là memo (giả sử nó không phải là một trùng hợp ngẫu nhiên)?
Cảm ơn!
lõm mã của bạn trông không đúng. Đó có phải là hàm lồng nhau không? – MAK
FTFY ........... – katrielalex
BTW này đã được triển khai trong Python 3.2 dưới dạng ['functools.lru_cache'] (http://docs.python.org/dev/library/functools.html#functools .lru_cache). – katrielalex