python - 关于在 Python 中将参数传递给函数的位置和关键字方式的一些疑问
问题描述
我在与认证相关的练习中有以下问题。
我有这个简单的功能:
def fun(a,b):
return a + b
由以下人员调用:
res = fun(1,2)
在学习材料上,对“传递参数的方式是什么”这个问题给出以下答案:关键字。
我认为这个答案是错误的,因为根据:https ://www.techbeamers.com/python-function/
关键字方式应该暗示这样的事情:
res = fun(a=1, b=2)
我的推理正确吗?
其他选项是:
- 命名为
- 位置的
- 顺序的
我的想法是在这种情况下是位置的。
是我的推理正确还是我遗漏了什么?
解决方案
到目前为止,教程给出的答案是正确的,它们都是位置参数和关键字参数。考虑以下示例:
>>> def f(a,b):
print(a)
>>> f(2,3)
2
>>> f(b=3, a=2)
2
函数(或方法)定义中的命名实体,它指定函数可以接受的参数(或在某些情况下,参数)。有五种参数:
positional-or-keyword:指定可以按位置或作为关键字参数传递的参数。这是默认类型的参数,例如下面的 foo 和 bar:
def func(foo, bar=None): ...
仅位置:指定只能由位置提供的参数。Python 没有用于定义仅位置参数的语法。但是,一些内置函数具有仅位置参数(例如 abs())。
仅关键字:指定只能由关键字提供的参数。仅关键字参数可以通过在它们之前的函数定义的参数列表中包含单个 var-positional 参数或 bare
*
来定义,例如下面的 kw_only1 和 kw_only2:
def func(arg, *, kw_only1, kw_only2): ...
在其他意义上,“位置”也总是正确的——因为关键字参数被评估为“幕后”的位置参数。来自Python 语言参考(调用):
如果存在关键字参数,它们首先被转换为位置参数,如下 [...]
相同的文档还给出了位置参数但不是关键字参数的示例:
CPython 实现细节:一个实现可以提供其位置参数没有名称的内置函数,即使它们是出于文档目的而“命名”的,因此不能由关键字提供。
PyArg_ParseTuple()
在 CPython 中,在 C 中实现的用于解析其参数的函数就是这种情况。
推荐阅读
- laravel - 如何将任务同时分配给多个用户?
- html - 如何在 DOM 上显示由 API 调用返回的 HTML 响应?
- javascript - 用单词上的链接替换 %a 时出现问题
- sanity - 当我使用“sanity init”成功后尝试执行“sanity start”时出错
- python - 通过 Python 在 *.docx 文件的标头中添加标签
- ios - SwiftUI - 可重用组件,带有指向其他视图的链接作为参数
- java - 为什么该方法只返回 0 ?(爪哇)
- node.js - 如果 params 值为 Null,我如何获取所有数据,否则匹配数据?
- gnuplot - 首先绘制指定点,然后使用 gnuplot 从文件中绘制数据
- java - 在 CI/CD 管道部署期间如何在 DynamoDB 中进行数据库更改