Tôi đang làm việc với xlwt
có giới hạn 4k về số lượng kiểu có thể được xác định trong tài liệu excel.Làm thế nào để băm * args ** kwargs cho bộ nhớ cache chức năng?
Thông thường, người ta tạo ra phong cách như vậy:
style = xlwt.easyxf("font: bold 1")
Mà tôi chỉ đơn giản là thay thế bằng
def cached_easyxf(self, format):
return self._cache.setdefault(format, xlwt.easyxf(format))
Những hoạt động hoàn hảo. Bây giờ, tôi đã phát hiện ra rằng tôi cần phải vượt qua trong đối số từ khóa đôi khi mà tôi đã suy nghĩ: làm thế nào tôi nên băm chữ ký args/kwargs?
Tôi có nên tạo khóa bộ nhớ cache dựa trên str (giá trị) không? Pickle? Điều gì là mạnh mẽ nhất?
Đối với hoàn cảnh của tôi có vẻ như tôi chỉ có thể chuyển đổi khóa/giá trị cho xâu kí tự và thêm nó vào chìa khóa của tôi ... nhưng Tôi bây giờ tò mò về một cách chung chung để xử lý này với nói loại unhashable như arg=[1, 2, 3]
def cached_call(*args, **kwargs):
return cache.get(what_here)
cached_call('hello')
cached_call([1, 2, 3], {'1': True})
Cảm ơn câu trả lời Raymond! Nhiều đánh giá cao –
Công việc sau đây cũng sẽ như sau: 'key = (args, tuple (được sắp xếp (kwds.items())))'? Hoặc là nó chậm hơn vì các bộ bên trong? – max
@max Có, điều đó sẽ hiệu quả. Và có, các con trỏ bổ sung sẽ làm chậm nó xuống một chút cũng như tiêu thụ nhiều bộ nhớ hơn một chút. –