请参阅以下代码: -
#!/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))
有人可以解释一下*数字和**关键字如何获取参数? 一个简单的解释非常值得赞赏 提前致谢
答案 0 :(得分:23)
在代码numbers
中分配了(1,2,3)元组。 keywords
被分配了一个字典,其中包含vegetables
和fruits
。
一颗星(*
)定义位置参数。这意味着您可以接收任意数量的参数。您可以将传递的参数视为元组。
两颗星(**
)定义关键字参数。
参考资料可用here。
Python 2.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只能通过名称绑定后的关键字参数)
答案 1 :(得分:1)
让我们先细分功能。
该总功能具有三个参数。
=======================================
count =初始
**我们知道initial是包含5的关键字参数。 因此,现在将值5分配给了一个名为count的变量。
数字中的数字:
*数字是数字的占位符。
*我们知道数字是一个任意参数,因此它可以接受任意数量的参数或值。
*因此,数字现在将包含在执行函数时在numbers参数中传递的参数。
count + =数字
*每次它循环遍历numbers参数并将计数加到数字上并返回一个计数
*当count为5时,它将循环遍历参数并添加参数的第一个实例。这将重复进行直到循环耗尽为止。
用于键入关键字:
*这很棘手,因为这次参数是字典类型,其中包含键和该键的对应值。
计数+ =个关键字[键]
返回计数
100 + 50 +(10,1,2,3)=> 166。
我知道这个答案太大了,但是了解每个函数的基本概念是一个全面的程序员的核心力量。