【问题标题】:Would calling a function like this be considered bad practice?调用这样的函数会被认为是不好的做法吗?
【发布时间】:2009-12-16 20:41:02
【问题描述】:

假设我有这个函数签名:

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

考虑到所有传递的参数都应该是False,我决定这些是调用此函数的简洁方法:

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

但有件事告诉我那将是糟糕的 Python 风格。你怎么看?

【问题讨论】:

    标签: python


    【解决方案1】:

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

    请记住,阅读代码的次数很多多于编写的次数。

    【讨论】:

    • 是的,起初我认为这并不难阅读和理解,但后来我又想了。谢谢!
    【解决方案2】:

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

    如果您实际上要“违反”五个默认参数,我会在调用中明确显示这一点,以使读者清楚。即,我会按名称明确列出每个参数并指出错误。

    虽然您编写的代码应该可以工作,但它会分散注意力,并且有人会专注于弄清楚您到底在做什么,而不是意识到重要的一点 - 您正在打一个非常特殊的电话,因为您没有接听任何默认值。这里不是保存(电子)树木的地方。

    【讨论】:

      【解决方案3】:

      您的代码应该能够自我解释并且易于阅读。 Style Guide for Python 给出了这个例子,应该有助于回答你的问题:

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

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

      示例:

          Yes: if foo.startswith('bar'):
      
          No:  if foo[:3] == 'bar':
      

      【讨论】:

        猜你喜欢
        • 2010-09-19
        • 2013-12-08
        • 1970-01-01
        • 2016-05-30
        • 2010-09-26
        • 2010-12-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多