请问左边的程序运行之后为什么结果是右边那样的?

img

方法定义那里的星星你一定是理解的,调用方法那里的星星的确有点懵人 。

name = ["张三", "李四"]
info = {"年龄": "20", "性别": "男"}

# def f(a, *b, **c) 方法定义,
#   第一个参数a,只接收一个数据,
#   第2个参数*b,接收‘一串’数据-元组,它先吃饱,剩下的才给右边参数。
#   第3个参数**c,接收一个字典。

f(name, "Hello", info) 
# 虽然name列表,但是作为独立的个体数据参数,直接被a接收。
# hello 和字典也都是独立的个体,直接被b全收了。
print()
# <class 'list'>  ['张三', '李四']
# <class 'tuple'> ('Hello', {'年龄': '20', '性别': '男'})
# <class 'dict'>  {}

f(name, "Hello", **info)
# name是独立个体,被a接收
# hello是个体,被可变参数接收者b收了,
# info前面带了**,所以它作为‘字典’传入,由专门接收字典的c接收
print()
# <class 'list'>  ['张三', '李四']
# <class 'tuple'> ('Hello',)
# <class 'dict'>  {'年龄': '20', '性别': '男'}

f(*name, "Hello", **info)
# name前面带个*,说明它的元素们作为独立个体参数,
# 相当于 f("张三", "李四", "Hello", **info)
# a只接收一个‘张三’,剩下的自然是b接收,直到info是传给c的
print()
# <class 'str'>   张三
# <class 'tuple'> ('李四', 'Hello')
# <class 'dict'>  {'年龄': '20', '性别': '男'}

这是位置参数,可变参数及关键字参数的用法,当用name传参时,由于函数只有一个a位置参数,所以只会取张三,而将name中的其他元素均作为可变参数传给b,因而b输出的是一个图右中所示的一个元组。