Python语法: *与**关于参数解包与参数传递
[参考]( https://www.cnblogs.com/gongyu2018/p/8805183.html#:~:text=在函数调用的时候,Python解释器自动按照参数位置和参数名把对应的参数传进去。 所以,对于任意函数,都可以通过类似 func (*args%2C **kw) ,%E7%9A%84%E5%BD%A2%E5%BC%8F%E8%B0%83%E7%94%A8%E5%AE%83%EF%BC%8C%E6%97%A0%E8%AE%BA%E5%AE%83%E7%9A%84%E5%8F%82%E6%95%B0%E6%98%AF%E5%A6%82%E4%BD%95%E5%AE%9A%E4%B9%89%E7%9A%84%E3%80%82%20Python%E7%9A%84%E5%87%BD%E6%95%B0%E5%85%B7%E6%9C%89%E9%9D%9E%E5%B8%B8%E7%81%B5%E6%B4%BB%E7%9A%84%E5%8F%82%E6%95%B0%E5%BD%A2%E6%80%81%EF%BC%8C%E6%97%A2%E5%8F%AF%E4%BB%A5%E5%AE%9E%E7%8E%B0%E7%AE%80%E5%8D%95%E7%9A%84%E8%B0%83%E7%94%A8%EF%BC%8C%E5%8F%88%E5%8F%AF%E4%BB%A5%E4%BC%A0%E5%85%A5%E9%9D%9E%E5%B8%B8%E5%A4%8D%E6%9D%82%E7%9A%84%E5%8F%82%E6%95%B0%E3%80%82%20%E9%BB%98%E8%AE%A4%E5%8F%82%E6%95%B0%E4%B8%80%E5%AE%9A%E8%A6%81%E7%94%A8%E4%B8%8D%E5%8F%AF%E5%8F%98%E5%AF%B9%E8%B1%A1%EF%BC%8C%E5%A6%82%E6%9E%9C%E6%98%AF%E5%8F%AF%E5%8F%98%E5%AF%B9%E8%B1%A1%EF%BC%8C%E8%BF%90%E8%A1%8C%E4%BC%9A%E6%9C%89%E9%80%BB%E8%BE%91%E9%94%99%E8%AF%AF%EF%BC%81%20%2A%2Akw%20%E6%98%AF%E5%85%B3%E9%94%AE%E5%AD%97%E5%8F%82%E6%95%B0%EF%BC%8Ckw%E6%8E%A5%E6%94%B6%E7%9A%84%E6%98%AF%E4%B8%80%E4%B8%AAdict%E3%80%82)
1. 写在函数定义里的*
在许多地方常常会见到这样的写法:
def calc(*nums):
s = 0
for i in nums:
s += i
return s
这里的*含义是将传入calc里所有的参数组装成一个元组。
作用是方便调用的时候传递参数,否则如果想传入多个参数,那么首先还要组装成一个列表或者元组。
2. 写在调用函数括号里的*
例子:
nums = [1,2,3]
calc(*nums)
这用于如果已经有一个列表或者元组对象了,需要依次将其中的对象传入calc的情况。如果不这样写,就只能笨拙的写成:calc(nums[0],nums[1],...)
3. 函数定义里的**
例子:
def person(name,age,**kw):
这里的kw在调用时:
person("tom",12,city='bj',gender='male')
# 或者
kw = {city:'bj',gender:'male'}
person("tom",12,**kw)

浙公网安备 33010602011771号