在开始学习python之前,我已经开始学习一些Objective-C / Cocoa书籍。我记得,大多数函数都需要明确说明关键字参数。直到最近,我都忘记了这一切,只是在Python中使用了位置参数。但是最近,我遇到了一些由于位置不当而导致的错误- 它们是偷偷摸摸的小东西。
让我思考-一般而言,除非有专门要求使用非关键字参数的情况-是否有充分的理由不使用关键字参数?即使对于简单功能也总是使用它们是否被认为是不好的风格?
我感觉就像我的大多数50行程序都定期扩展到500行或更多行一样,如果我习惯于始终使用关键字参数,随着代码的增长,代码将更易于阅读和维护。有什么原因可能不是这样吗?
更新:
我得到的总体印象是,它具有样式首选项,其中包含许多好的参数,通常不应将它们用于非常简单的参数,而应与好的样式保持一致。在接受之前,我只是想澄清- 这种方法是否会引起任何特定的非样式问题-例如,性能显着下降?
除了代码的清晰性和可读性之外,没有任何理由不使用关键字参数。是否使用关键字的选择应基于关键字在阅读代码时是否添加其他有用信息。
我遵循以下一般规则:
text.splitlines(True)
funkyplot(x, y, None, None, None, None, None, None, 'red')
sin(2*pi)
sin(value=2*pi)
plot(x, y, z)
在大多数情况下,稳定的强制性参数将为位置,而可选参数将为关键字。
在性能上也可能存在差异,因为在每种实现中,关键字参数都会稍慢一些,但是考虑到这通常是过早的优化,并且其结果并不重要,我认为这对决定并不重要。
更新:非风格的关注
关键字参数可以执行位置参数可以执行的所有操作,并且,如果要定义新的API,除了可能的性能问题之外,没有技术上的缺点。但是,如果将代码与现有元素结合在一起,则可能会遇到一些问题。
考虑以下:
cls.method(self=cls_instance)
self
如果您精心设计了API并记录了关键字参数的使用,那么所有这些都不是一个真正的问题,尤其是如果您不打算设计与现有的东西可以互换的东西时,尤其如此。