调用这样的函数会被视为不良做法吗?

时间:2009-12-16 20:41:03

标签: python

假设我有这个功能签名:

def foo(a=True, b=True, c=True, d=True, e=True):

我已经决定调用这个函数会有简洁的方法,因为所有传递的参数应该是False

foo(*5*[False])
foo(*[False]*5)

但有些东西告诉我那将是糟糕的Python风格。你觉得怎么样?

3 个答案:

答案 0 :(得分:9)

如果难以阅读,那就是糟糕的风格。

请记住,代码比读取更多

答案 1 :(得分:4)

我喜欢使用默认值遵循80-20规则。如果函数具有参数的默认值并且我选择使用不同的值,我需要在调用中明确这一点,因为这是一个重要的信息。

如果您实际上正在“违反”五个默认参数,我会在电话中明确表示,以便向读者说明。即,我会按名称明确列出每个参数,并指出错误。

虽然你写的代码应该有用,但这会分散注意力,有人会集中精力搞清楚你到底在做什么,而不是意识到重要的一点 - 你正在做一个非常特别的电话,因为你没有接受任何默认值。这不是保存(电子)树木的地方。

答案 2 :(得分:1)

您的代码应该自行解释并且易于阅读。 Style Guide for Python给出了这个示例,它可以帮助回答您的问题:

  

使用''。startswith()和''。endswith()   而不是字符串切片来检查   前缀或后缀。

     

startswith()和endswith()是   更清洁,更不容易出错。对于

     

示例:

    Yes: if foo.startswith('bar'):

    No:  if foo[:3] == 'bar':