您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

使用可以接受不是标识符的kwargs关键字参数的函数安全吗?

使用可以接受不是标识符的kwargs关键字参数的函数安全吗?

首先:**{...}具有非标识符名称调用约定仅在被调用函数具有**kw接收它们的参数的情况下才有效,因为它也无法定义不是有效标识符的显式关键字参数

我要说的是,keyword_arguments语法仅适用于 代码 的解析器,不能被视为对**expression结果内容功能限制。下面的功能描述没有明确限制字典的键,功能定义文档也没有。

相反,因为语法允许的expression功能规范规定,应该可以解决的映射 ,其中被视为额外的关键字参数内容 ,很显然(对我)有上的按键没有任何限制 可言 ,超越适用于Python词典的普通键(键必须是不可变的)。您可以为所有Python护理传递元组或数字键。功能规格说明内容的处理方式,而不是内容必须符合特定格式。

因此,在我看来,功能规范必须 明确 限制**expression字典中的键以禁止您执行操作,因为语法肯定不会。进行更改将是一个巨大的向后不兼容的更改,并且不可能再添加

请注意,即使规范未提及字典键的任何限制,cpython也会:

>>> def f(*args, **kw): print args, kw
... 
>>> f(**{1: 2})
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: f() keywords must be strings

这是python解释器在调用代码对象(用户定义的函数)时做出的限制。在引发上述异常的部分之后的源代码中直接说明了原因:

/* Speed hack: do raw pointer compares. As names are
   normally interned this should almost always hit. */

通过将关键字限制为字符串,可以实现速度优化。

其他 2022/1/1 18:26:42 有554人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶