python - 如何优雅地在python中串行(或区分)函数参数或串行函数调用结果?
问题描述
我需要串行一些函数结果。
现在,我的解决方案是使用pickle
包和一个名为@serial_result
:
def serial_result(func):
def wrapper(*args, **kwargs):
dump_fname = func.__name__ + ('.' + str(args) if args else '') + ('.' + str(kwargs) if kwargs else '') + '.dump'
serial_file = SERIAL_FILE_DIR + dump_fname
if os.path.exists(serial_file):
print('[serial_result] is loading results of function %s ...' % (func.__name__,))
return pickle.load(open(serial_file, 'rb'))
else:
result = func(*args, **kwargs)
print('[serial_result] is dumping results of function %s ...' % (func.__name__,))
pickle.dump(result, open(serial_file, 'wb'))
return result
return wrapper
@serial_result
def get(type):
pass
装饰器首先检查转储文件是否存在。如果是这样,反序列化并返回。或者调用函数,序列化结果并写入文件。
装饰器的第一个版本只是func.__name__
用作串行文件名,一个函数使用一个相同的转储文件。
但是我想让装饰器识别传递给函数的不同参数,get(0)
并且
可能get(1)
返回不同的结果。
现在我只使用str(args)
和str(kwargs)
作为转储文件名。
我认为这种做法迟早会坏掉:特殊字符、对象内存地址等等。
问题来了:
装饰器必须区分传递的不同参数。还有其他想法可以更优雅和pythonic吗?
解决方案
推荐阅读
- angular - 如何在 Angular 模板中进行干净的验证
- python - 无法使用 https 连接到 www.example.com
- azure - “绑定类型'queueTrigger'未注册”错误随机出现。
- java - 使用 JAI 加载 JPEG2000 图像
- python-2.7 - (Nosetest) AssertionError: None != inlearningpythonthehardway ex48 lexicon scan
- amazon-s3 - 如果将 Amazon S3 标签放在一起,如果超过五个,那么组合不起作用?可能是什么原因?我正在尝试玩这个--
- c# - Process.StandardOutput.ReadToEnd() 与 Process.WaitForExit()
- python - 如何在 python-behave 中从多个文件夹运行测试?
- node.js - 为什么以下文件路径正确....ejs ,nodejs
- php - 在 PHP 中使用 Google API OAuth 获取用户信息