许多python内置函数不使用关键字参数。例如,chr
函数。
>>> help(chr)
Help on built-in function chr in module builtins:
chr(i, /)
Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.
尝试使用关键字参数将值传递给chr
无效。
>>> chr(i=65)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: chr() takes no keyword arguments
我知道/
函数帮助文本中的chr
字符意味着它不会带有关键字参数。
如何定义不包含关键字参数的函数?当然,我想定义一个仅包含位置参数的函数。
这可能会被标记为重复项,但至少这样我会得到答案。我找不到这个问题的答案。
我了解到的另一个类似功能是创建一个不使用位置参数的函数。
>>> def f(*, a, b):
... print(a, b)
...
>>> f(1, 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() takes 0 positional arguments but 2 were given
>>> f(a=1, b=2)
1 2
This问题类似于我的问题,但实际上并未回答我的问题。我仍然不知道如何定义一个不接受关键字参数的函数,例如几个内置函数。
答案 0 :(得分:2)
有PEP 570,它只是草稿,因此无法在纯Python中创建仅位置参数。但是,这可以通过用C为Python编写的函数来完成。
答案 1 :(得分:1)
看到以前的答案从未更新为3.8,这是对未来读者的简短答案
函数声明中的/
字符将之前的所有参数标记为仅位置
def func(a, b, /):
print(a ** b)
func(2, 4) # safe
func(a=2, b=4) # got some positional-only arguments passed as keyword arguments: 'a, b'
和函数声明中的*
字符将之后的所有参数都标记为仅关键字
def func(*, a, b):
print(a ** b)
func(a=2, b=4) # safe
func(2, 4) # takes 0 positional arguments but 2 were given
这些声明可以组合在一起创建具有所有三个选项的函数 仅位置- 默认(两个)-仅关键字
def func(a, b, /, c, *, d, e):
pass #too lazy to think of a use case
func(1, 2, 3, d=4, e=5) # safe
func(6, 7, c=8, d=9, e=10) # safe
func(1, b=2, c=3, d=4, e=5) # got some positional-only arguments passed as keyword arguments: 'b'
# etc