我在练习中提出了以下与认证相关的问题。
我有这个简单的功能:
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
从 Python 术语表(参数(:
函数(或方法(定义中的命名实体,它指定函数可以接受的参数(或在某些情况下为参数(。有五种参数:
位置或关键字
:指定可以按位置传递或作为关键字参数传递的参数。这是默认类型的参数,例如以下内容中的 foo 和 bar:
def func(foo, bar=None): ...
仅位置:指定只能由位置提供的参数。Python 没有用于定义仅位置参数的语法。但是,一些内置函数具有仅位置参数(例如 abs(((。
仅关键字:指定只能由关键字提供的参数。仅关键字参数可以通过在函数定义的参数列表中包含单个变量位置参数或裸
*
来定义,例如以下内容中的kw_only1和kw_only2:
def func(arg, *, kw_only1, kw_only2): ...
换句话说,"位置"也总是正确的——因为关键字参数被评估为"幕后"的位置参数。来自 Python 语言参考(调用(:
如果存在关键字参数,则首先将它们转换为位置参数,如下所示 [...]
相同的文档还给出了位置参数而不是关键字参数的示例:
CPython 实现细节:实现可以提供内置函数,其位置参数没有名称,即使它们出于文档目的而"命名",因此无法通过关键字提供。在CPython中,用C实现的函数就是这种情况,这些函数使用
PyArg_ParseTuple()
来解析其参数。
也许如果你想要默认参数,你应该添加这个
def fun(a=1,b=1)
return a+b
所以如果你调用fun没有参数,默认会使代码不错误
>>> fun()
2