问题描述
与我一起工作的某些人已经决定,他们希望我们正在研究的库中的函数可以接受同一arg的多个名称。
(这样做的动机是,人们在学术环境中使用该库会发现Unicode关键字参数直观,容易且明显正确,而非学术界的人会发现它们完全不可接受。整个想法可能不成立的原因最好不在这个问题的范围之内。)
例如:
def lambda_squared(**kwargs):
"""
@param λ: A kwarg,which will be squared.
@param lambda: An alias for λ. Exactly one is required,don't use both.
@return: λ**2
@raise ValueError: Raised if no or both kwargs are passed.
"""
keys = ('λ','lambda')
try:
key = next(k for k in keys if k in kwargs)
assert 1 == len(kwargs)
except:
raise ValueError('Exactly one of `λ` or `lambda` is required as a kwarg.')
return kwargs[key]**2
将遵循此模式的许多不同功能将使用少量的args。装饰器似乎是一个好主意,这是一种可能的外观:
@alias_kwarg('lambda',as='λ')
def lambda_squared(*,λ):
"""
@param λ: A kwarg,which will be squared.
@return: λ**2
"""
return λ**2
虽然我当然可以自己快速构建这样的装饰器,但我们做得越少越好。有谁知道现成的装饰器(或类似的装饰器)?是否有一种“正常”的实现方式?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)