我正在尝试创建最简单的代码来处理 kwargs 关键字的别名。例如,在 matplotlib 中,color='red' 也可以标记为 c='red'。下面的代码可以工作,但是有更好的方法吗?
我正在考虑开发一个知道关键字、别名、默认值和它们链接到的变量的类/结构。这些的列表或字典将在函数中声明,并且单个调用将解析 kwargs。
class Cylinder():
def __init__(self,d:float,l:float):
"""
d = diameter
l = length
"""
self.d:float = d
self.l:float = l
#Default values
self.color:str = 'black'
self.transparency:float = 0.0
return
def Plot(self, **kwargs):
"""
Optional parameters:
color or c default 'black'
transparency or tr default 0.0
"""
if 'color' in kwargs:
self.color = kwargs['color']
elif 'c' in kwargs:
self.color = kwargs['c']
if 'transparency' in kwargs:
self.transparency = kwargs['transparency']
elif 'tr' in kwargs:
self.transparency = kwargs['tr']
print("Plotting....color = ", self.color, ' transparency = ', self.transparency)
return
您可以创建一个实用函数来处理该问题:
def parse_kwarg(kwargs, aliases, default_value):
for alias in aliases:
try:
return kwargs[alias]
except KeyError:
pass
return default_value
class Cylinder:
# ...
def plot(self, **kwargs):
color = parse_kwarg(kwargs, ('color', 'c'), self.color)
transparency = parse_kwarg(kwargs, ('transparency', 'tr'), self.transparency)
print("Plotting....color = ", color, ' transparency = ', transparency)