gpt4 book ai didi

coding-style - 有什么理由不总是使用关键字参数?

转载 作者:IT老高 更新时间:2023-10-28 20:22:57 25 4
gpt4 key购买 nike

在进入 python 之前,我已经开始阅读一些 Objective-C/Cocoa 书籍。我记得,大多数函数都需要明确声明关键字参数。直到最近我都忘记了这一切,只是在 Python 中使用了位置参数。但最近,我遇到了一些由于位置不当而导致的错误——它们是鬼鬼祟祟的小东西。

让我开始思考——一般来说,除非有特别需要非关键字参数的情况——有什么理由不使用关键字参数吗?即使对于简单的功能,总是使用它们是否被认为是不好的风格?

我觉得我的大多数 50 行程序都定期扩展到 500 行或更多行,如果我习惯总是使用关键字参数,那么随着代码的增长,代码将更容易阅读和维护。有什么理由可能不是这样吗?

更新:

我得到的总体印象是,它是一种风格偏好,有很多很好的论据,它们通常不应该用于非常简单的论据,但在其他方面与良好的风格一致。在接受之前,我只是想澄清一下——这种方法是否会出现任何特定的非风格问题——例如,显着的性能损失?

最佳答案

除了代码的清晰性和可读性之外,没有任何理由不使用关键字参数。是否使用关键字的选择应该根据关键字在阅读代码时是否添加额外的有用信息来决定。

我遵循以下一般规则:

  1. 如果难以从函数名称推断参数的函数(名称),请通过关键字传递它(例如,我不想在我的代码中包含 text.splitlines(True))。
  2. 如果很难推断参数的顺序,例如,如果您有太多参数,或者当您有独立的可选参数时 - 通过关键字传递它(例如 funkyplot(x, y, None, None, None, None, None, None, 'red') 看起来不是特别好)。
  3. 如果参数的目的很明显,切勿通过关键字传递前几个参数。你看,sin(2*pi)优于sin(value=2*pi) , plot(x, y, z) 也是如此.

在大多数情况下,稳定的强制参数是位置参数,可选参数是关键字。

性能也可能存在差异,因为在每个实现中,关键字参数都会稍微慢一些,但考虑到这通常是一个过早的优化并且它的结果不会很重要,我认为这并不重要做出决定。

更新:非风格问题

关键字参数可以做位置参数可以做的所有事情,如果您要定义一个新的 API,除了可能的性能问题之外,没有任何技术缺点。但是,如果您将代码与现有元素结合起来,您可能会遇到一些小问题。

考虑以下几点:

  • 如果你让你的函数接受关键字参数,那将成为你接口(interface)的一部分。您不能将您的函数替换为具有相似签名但相同参数的关键字不同的另一个函数。
  • 您可能希望在您的函数上使用装饰器或其他实用程序,假设您的函数采用位置参数。未绑定(bind)方法是此类实用程序的一个示例,因为它们在将第一个参数读取为位置后总是将其作为位置传递,因此 cls.method(self=cls_instance)即使有参数也不起作用self在定义中。

如果您设计好 API 并记录关键字参数的使用,这些都不是真正的问题,尤其是如果您没有设计应该与已经存在的东西互换的东西。

关于coding-style - 有什么理由不总是使用关键字参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7041752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com