Created
October 26, 2022 01:28
-
-
Save qlawmarq/0ea6c6368e7c1d6b90a62e690cd084ed to your computer and use it in GitHub Desktop.
Memorize function for Python
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import os | |
from uuid import uuid4 | |
##### Memorize function for performance ################### | |
################################################################# | |
def get_id_tuple(f, args, kwargs, mark=object()): | |
l = [id(f)] | |
for arg in args: | |
l.append(id(arg)) | |
l.append(id(mark)) | |
for k, v in kwargs: | |
l.append(k) | |
l.append(id(v)) | |
return tuple(l) | |
_memoized = {} | |
def memoize(f): | |
def memoized(*args, **kwargs): | |
key = get_id_tuple(f, args, kwargs) | |
if key not in _memoized: | |
_memoized[key] = f(*args, **kwargs) | |
return _memoized[key] | |
return memoized | |
##### Test function ############################################# | |
################################################################# | |
@memoize | |
def test_fucn(): | |
print('Test run') | |
token = str(uuid4()) | |
print(token) | |
return token |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment