所以,我想修改 json.loads() 函数以接受一个新的关键字参数,但不要让它只是 kwargs 的一部分。 换句话说,我希望它成为函数签名的明确部分。
这是我对如何做到这一点的猜测。 有没有更好的方法来做到这一点?
def json_to_python_syntax(json_method):
"""
Translate JSON-conforming key names to Pythonic standards on dict.
The goal of this decorator is to add a standard keyword parameter
'convert_syntax' onto the method. But, I'm not sure how to do this.
"""
@wraps(json_method)
def wrapper(json_string, convert_syntax=False, **kwargs):
pythonic_dict = dict()
json_syntax_dict = json_method(json_string, **kwargs)
if not convert_syntax:
return json_syntax_dict
for key, value in json_syntax_dict.iteritems():
for json_syntax in re.finditer(r'[A-Z]', key):
key = key.replace(
json_syntax.group(), '_' + json_syntax.group()[0].lower())
pythonic_dict[key] = value
return pythonic_dict
return wrapper
我对这种方法的担忧是,它会在 json.loads 中使用预期的关键字参数顺序(它使 convert_syntax 成为 json 字符串之后的第一个预期参数),并且可能会在更大的程序中弄乱对 json.loads 的其他调用,假设标准顺序。