所以我想说我有一个功能:
def print_something(a, b, c='something', d='something else'):
print '{}/{}/{}/{}'.format(a, b, c, d)
我有这种方法:
def print_method(self, a, b):
if self.c and self.b:
print_something(a, b, self.c, self.d)
elif self.c:
print_something(a, b, c=self.c)
elif self.d:
print_something(a, b, d=self.d)
else:
print_something(a, b)
有没有办法获得与print_method()
相同的功能,而无需为self.c和self.d的每种可能组合提供if?
答案 0 :(得分:4)
您可以将字典传递给包含关键字参数名称和值的函数调用。所以这样的事情应该有效:
kwargs = dict((k, getattr(self, k)) for k in ('c', 'd') if getattr(self, k))
print_something(a, b, **kwargs)
答案 1 :(得分:2)
您可以将其他功能设置值更改为空字符串,因此除非我们传入非空字符串,否则将使用默认值:
def print_something(a, b, c="", d=""):
c = 'something' if not c else c
d = 'something else' if not d else d
print('{}/{}/{}/{}'.format(a, b, c, d))
def print_method(self, a, b):
print_something(a, b, self.c, self.d)
或者更简洁,因为您认为在我们的班级中的if检查中任何假名值都是假的,我们可以使用c = c or default
def print_something(a, b, c="", d=""):
c = c or 'something'
d = d or 'something else'
print('{}/{}/{}/{}'.format(a, b, c, d))
答案 2 :(得分:-1)
您可以在此处使用**args
:
def print_method(self, a, b):
extra_args = {}
if self.c:
extra_args['c'] = self.c
if self.d:
extra_args['d'] = self.d
print_something(a, b, **extra_args)
这会使print_something()
调用你有多少额外的参数。