我有一本字典,它将传递给多个函数。在每个函数中,我需要提取字典的所有值。在
例如
def foo(mas_details):
# Extract mas details
if 'ip' in mas_details.keys():
mas_ip = mas_details['ip']
else:
logger_object.critical("MAS IP not provided!")
return False
if 'username' in mas_details.keys():
mas_username = mas_details['username']
else:
mas_username = 'root'
if 'password' in mas_details.keys():
mas_password = mas_details['password']
else:
mas_password = 'root'
if 'protocol' in mas_details.keys():
mas_protocol = mas_details['protocol']
else:
mas_protocol = "http"
if 'timeout' in mas_details.keys():
mas_timeout = mas_details['timeout']
else:
mas_timeout = 120
我有大约15个函数,我将传递这个mas_details
字典。但是,提取每个函数中的值会使代码重复。在
我想把值的提取放入函数本身。但是,如果我这样做,变量将无法在父函数中访问,除非我使所有变量global
。在
最好的办法是什么?在
代码可以缩小很多:
keys()是多余的,它等于
^{pr2}$但更重要的是
等于
如果键不存在,get函数将使用默认值。在
但是:你所拥有的是一些变量组和一些总是作用于变量的功能。这就是我们发明类的原因:
等等。然后传入一个
MasDetails
实例并使用它的.username
属性。在如果您有任何只使用这些属性的功能,请将其作为方法放在这个类中。在
特别是,也许你的
foo
函数和其他14个函数应该只是MasDetails
类上的方法,然后它们就可以使用self.username
。在如果你只需要一个函数中的所有6个变量,你可以破坏字典,也就是说
这将使您可以访问变量,而无需从字典中显式提取。一个好的做法是限制参数的数量,因此考虑用默认值初始化dict一次,然后使用
^{pr2}$**kwargs
并手动提取所需的值,以防参数数量增加。在相关问题 更多 >
编程相关推荐