在Python中只解释关键字参数(VarArgs)

2024-04-24 12:20:23 发布

您现在位置:Python中文网/ 问答频道 /正文

请参阅下面的代码:

#!/usr/bin/python
# Filename: total.py

def total(initial=5, *numbers, **keywords):
    count = initial
    for number in numbers:
        count += number
    for key in keywords:
        count += keywords[key]
    return count

print(total(10, 1, 2, 3, vegetables=50, fruits=100))

有人能解释一下*数字和**关键字是如何提取论点的吗? 一个简单的解释是非常值得赞赏的 提前谢谢


Tags: key代码inpynumberforbinusr
1条回答
网友
1楼 · 发布于 2024-04-24 12:20:23

在代码中,numbers被分配了(1,2,3)元组。keywords被分配了一个字典,包含vegetablesfruits

一个星(*)定义位置参数。这意味着您可以接收任意数量的参数。可以将传递的参数视为元组。

双星(**)定义关键字参数。

参考材料是可用的here

示例

Python2.x(仅在关键字参数之前)

def foo(x, y, foo=None, *args): print [x, y, foo, args]

foo(1, 2, 3, 4)            --> [1, 2, 3, (4, )]  # foo == 4
foo(1, 2, 3, 4, foo=True)  --> TypeError

Python 3.x(仅带关键字参数)

def foo(x, y, *args, foo=None): print([x, y, foo, args])

foo(1, 2, 3, 4)           --> [1, 2, None, (3, 4)]  # foo is None
foo(1, 2, 3, 4, foo=True) --> [1, 2, True, (3, 4)]

def combo(x=None, *args, y=None): ...  # 2.x and 3.x styles in one function

尽管一个经验丰富的程序员理解2.x中发生的事情,但这是违反直觉的(只要有足够的位置参数,位置参数就绑定到foo=而不管关键字参数是什么)

Python 3.x使用PEP-3102引入了更直观的仅关键字参数(varargs后面的关键字参数只能由名称绑定)

相关问题 更多 >