Python args 和 kwargs 在实践中是否曾被命名为其他名称?

2024-03-03

Python 不限制参数的名称,但是有些参数名称严格遵守约定,例如self, cls, args, and kwargs。名字self and cls总是代表相同的概念,因此在这些情况下,我很难找到令人信服的理由让某人偏离惯例。和args and kwargs然而,我发现这种命名约定令人窒息。

假设我有一个类,它具有可以通过将 kwargs 传递给其构造函数来设置的各种属性:

class MyObj:
    def __init__(self, **kwargs):
        for propname in kwargs:
            self.set_property(propname, kwargs[propname])

在这种情况下,kwargs 只是该类实例的可设置属性,因此对我来说,将定义编写如下是有意义的:

class MyObj:
    def __init__(self, **properties):
        for propname in properties:
            self.set_property(propname, properties[propname])

这样,人们只需查看方法的签名即可了解 kwargs 的用途。

一般来说,我认为约定俗成是一件好事。然而,在我看来,总是使用args and kwargs错失了向 API 用户传达有关函数/方法的 args 和 kwargs 性质的有用信息的机会。毕竟,它们是未命名或命名参数的事实已经通过单星号或双星号的存在而清楚地表明了。

有没有人有在现实世界的多开发人员代码中使用 args 和 kwargs 的替代名称的示例,或者为这些构造使用其他变量名称是否太违反规则?

如果不使用这些传统名称确实是一个非常非常可怕的想法,那么原因是什么?


我没有看到任何反对使用上下文特定名称的理由,例如......

my_sum(*numbers), my_parser(*strings, **flags), etc.

The print https://docs.python.org/3/library/functions.html#print文档说*objects.

The zip https://docs.python.org/3/library/functions.html#zip文档说*iterables.

itertools.chain https://docs.python.org/3.7/library/itertools.html#itertools.chain uses *iterables在文档和文档字符串中。

>>> from itertools import chain
>>> chain.__doc__.splitlines()[0]
'chain(*iterables) --> chain object'

collections.ChainMap https://docs.python.org/3.7/library/collections.html#collections.ChainMap uses *maps在文档和__init__.

>>> from collections import ChainMap
>>> from inspect import signature
>>> signature(ChainMap.__init__)
<Signature (self, *maps)>

请随意寻找更多示例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python args 和 kwargs 在实践中是否曾被命名为其他名称? 的相关文章

随机推荐

  • AngularJS $compile 未定义

    我正在尝试学习 AngularJS 并且正在尝试动态编译一些 DOM 元素 我已经尝试过演示 try var templateHTML angular element p total p scope var clonedElement co
  • 哪里是设置 NOCOUNT 的最佳位置?

    对于运行在专用 SQL Server 上的大型数据库 数千个存储过程 是否最好包含SET NOCOUNT ON在每个存储过程的顶部 或者在服务器级别设置该选项 属性 gt 连接 gt 无计数 复选框 听起来 DRY 原则 不要重复自己 适用
  • iPhone 音频播放:通过内置扬声器强制播放?

    有谁知道是否可以实现即使插入耳机也可以通过内置扬声器播放音频文件 我不确定您是如何进行音频播放的 但请尝试查看 重定向输出音频 部分音频会话编程指南 http developer apple com iphone library docum
  • 如何内联分配 C 结构体?

    typedef struct int hour int min int sec counter t 在代码中 我想初始化该结构的实例 而不显式初始化每个成员变量 也就是说 我想做类似的事情 counter t counter counter
  • 从 json 反序列化,其中可以是单个 T 对象或 T 数组到 List [重复]

    这个问题在这里已经有答案了 我有这样的代码 var json GetJsonData path JObject event dates data JObject Parse json var event dates list JObject
  • /usr/local/lib/python2.6 和 /usr/lib/python2.6 有什么区别?

    我正在使用 Ubuntu 并注意到这两个目录 usr local lib python2 6 dist packages usr lib python2 6 dist packages 应该使用哪一个来安装 Python 包 Thanks
  • 持久的 RESTful 交互

    目前我们的团队正在进行讨论 我对其他观点感兴趣 假设我们有一个 RESTful Web 服务 其作用是通过应用各种分析算法和服务来注释文档 基本交互清晰 我们有一个资源 即文档集合 客户端将新文档 POST 到集合中 获取新文档的 URI
  • 如何设置表单具有透明背景

    我正在努力让我的表单在 vb net 中具有透明背景 目前采用新我设置的形式 Me SetStyle ControlStyles SupportsTransparentBackColor true 但表单仍然显示为具有默认的灰色背景 有人可
  • 如何在magento中进行自定义查询?

    我想在 magento 网站中编写自定义查询 我在 magento 根文件夹中创建了一个文件 test php 并编写了一个自定义查询 但它没有给我任何结果 请指导我 尝试这个 connection Mage getSingleton co
  • 如何在 python 中设置 __contains__ 方法?

    我无法理解如何正确设置contains我班上的方法 我知道当你调用它时它会自动使用运算符 in 我只是认为我不明白如何正确设置它 我必须使用它来查看 anotherCircle 是否包含在特定的圆圈内 均来自用户输入 教授让我们为此采用两种
  • Xcode 5 到 Xcode 4 项目运行

    我有一个在 iOS SDK 6 中启动的项目 我下载了带有 iOS 7 的 Xcode 5 Beta 并成功运行它 但是 要提交项目 我需要返回到 SDK 6 和 Xcode 4 当我这样做时 我会收到项目中每个 XIB 文件的以下消息 如
  • 尝试在实际 Apple Watch 上构建和运行 WatchKit 扩展时,如何避免错误“启动‘AppName’WatchKit 扩展时出错”?

    当我尝试在真正的 Apple Watch 上构建并运行 WatchKit 扩展时 有时会收到以下错误消息 我尝试为 iPhone 构建父应用程序 然后再次为我的 WatchKit 应用程序构建父应用程序 但我仍然收到错误消息 有谁知道导致此
  • 通过两张图像之间的姿势,如何将一个场景中的一个点投影到另一个场景中?

    如果您拥有查看同一场景的两个图像的完整相对 3D 值 相对 x y z 以及它们之间的外部 内部参数 那么如何将一个场景中的点投影到另一个场景中 在opencv中 一般情况下你不能这样做 有无数个 3D 点 3d 中的一条线 映射到图像空间
  • 如何查找包含 Visual Studio 项目的文件夹

    我在 Visual Studio 中创建了一个新项目并保存了它 如何找到包含项目的文件夹 当我单击 文件 gt 打开 时 它显示最近的文件夹 而不是包含当前项目的文件夹 右键单击项目的解决方案并选择 在 Windows 资源管理器中打开文件
  • Django Rest框架自定义序列化字段

    我刚刚开始使用 Django REST 框架 需要在序列化时将 DATETIME 字段自定义为 unix 纪元 整数 我目前有 models py class Snippet models Model created models Date
  • 在 SwiftUI 中,如何用另一个视图剪辑视图的一部分?

    我试图在 SwiftUI 中重叠两个圆圈并在它们之间留出边距 我目前正在使用这种方法 ZStack Circle frame width 60 height 60 foregroundColor Color blue shadow colo
  • 集群模式下的 Spring 入站集成

    我们正在使用 spring 入站轮询适配器来检查文件并处理它 问题是进程正在集群模式下运行多个节点 我们的测试环境使用两个节点的负载平衡 要求是在一个节点上启动此轮询过程 我们怎样才能在不创建两个 war 文件的情况下实现这一目标 我们不应
  • 如何使用 Leaflet.Draw GeometryUtil 计算多边形面积

    I read 这个答案 https stackoverflow com a 29813099 274677关于如何计算多边形的面积 我正在尝试实现相同的目标 然而 该区域我始终得到 0 零 JS 小提琴是here http jsfiddle
  • resharper 运行时无法在 VS Text Editor 中编辑源代码

    一段时间以来 我在 Visual Studio 12 中使用 Resharper 但几天后我遇到了问题 如果 Resharper 正在运行 我无法在 Visual Studio 的源代码编辑器中键入任何内容 我使用的是8 2 0 2160版
  • Python args 和 kwargs 在实践中是否曾被命名为其他名称?

    Python 不限制参数的名称 但是有些参数名称严格遵守约定 例如self cls args and kwargs 名字self and cls总是代表相同的概念 因此在这些情况下 我很难找到令人信服的理由让某人偏离惯例 和args and