假设我有这样的函数签名:调用这样的函数会被认为是不好的做法吗?
def foo(a=True, b=True, c=True, d=True, e=True):
我已经决定这将是简洁的方式来调用这个函数,考虑到所有传入的参数应该是False
:
foo(*5*[False])
foo(*[False]*5)
但直觉告诉我,将是不好的Python风格。你怎么看?
假设我有这样的函数签名:调用这样的函数会被认为是不好的做法吗?
def foo(a=True, b=True, c=True, d=True, e=True):
我已经决定这将是简洁的方式来调用这个函数,考虑到所有传入的参数应该是False
:
foo(*5*[False])
foo(*[False]*5)
但直觉告诉我,将是不好的Python风格。你怎么看?
如果很难阅读,这是不好的风格。
请记住,代码被读取很多比书面更频繁。
您的代码应该自行解释并易于阅读。该Style Guide for Python给出了这样的例子,这应有助于回答你的问题:
使用'.startswith()和'.endswith() 而不是字符串的切片检查 前缀或后缀。
startswith()和endswith()是 更清晰并且更不容易出错。对于
例如:
Yes: if foo.startswith('bar'): No: if foo[:3] == 'bar':
我喜欢下面的80-20规则默认值。如果一个函数有一个参数的默认值,我选择使用不同的值,我需要做的是明显,在通话,因为这是一条重要信息。
如果你真的要“违反”五个默认参数,我会在调用中明确表明,以便让读者清楚。即,我会按名称明确列出每个参数并指出错误。
尽管您编写的代码应该可以工作,但它会让人分心,而且有人会专注于弄清楚你到底在做什么,而不是意识到重要的一点 - 因为你没有采取任何行动的默认值。这不是保存(电子)树木的地方。
呀,一开始我以为是不是很难看懂,但后来我又想起。谢谢! – guinaps 2009-12-17 15:33:01