我们知道splat运算符解包多个值,并且知道函数参数有两种类型。若现在还未弄明白,那么可以将*args
理解为变元的缩写,而**kwargs
理解为关键字变元的缩写。
各参数用于解压其各自的变元类型,允许使用可变字长变元列表进行函数调用。例如,创建一个函数表示学生的考试分数。
def printScores(student,*scores):
print(f"Student Name:{student}")
for score in scores:
print(score)
printScores("Jonathan",100, 95, 88, 92, 99)
"""
Student Name: Jonathan
100
95
88
92
99
"""
噢,等等,我并未称呼其为*args
?是的,“args”是一个标准化规范,但仍然只是一个名称。事实上,在*args
中,唯一的星号是真正的参与者,创建了列表,其内容则是来自函数调用的位置参数(在这些定义变元后)。
这些理清楚之后,**kwargs
就很容易理解了。名称并不重要,重要的是双星号创建了字典,其内容是关键字参数,来自函数调用(在这些定义变元后)。
为了更好地演示,我们创建一个函数,输出参加全国英语等级考试的人员名单。
def printPetNames(owner,**pets):
print(f"Owner Name:{owner}")
for pet,name in pets.items():
print(f"{pet}:{name}")
printPetNames("Jonathan", dog="Brock",fish=["Larry", "Curly", "Moe"],turtle="Shelldon")
"""
Owner Name: Jonathan
dog: Brock
fish: ['Larry', 'Curly', 'Moe']
turtle: Shelldon
"""
评论 (0)