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)
posted @ 2022-11-10 10:56  X-ocean  阅读(138)  评论(0)    收藏  举报