Python函数中参数前带*和**是什么意思?

377 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Python函数中参数前带*和**是什么意思?

背景

前几天看了些python的代码,发现有些函数的参数前带有( )号,有的甚至有两个( )号,它们代表什么意思的?

解释

查阅资料后发现,参数前面加上* 号 ,意味着参数的个数不止一个,另外带一个星号*参数的函数传入的参数存储为一个元组(tuple) ,带两个**星号参数则是表示字典(dict) 下面我们实际操作一下:

 def t1(param1, *param2):
         print(param1)
         print(param2)
 t1(1,2,3,4)
 ​
 # 1
 # (2,3,4)
 def t2(param1, **param2):
         print param1
         print param2
 t2(1,a=2,b=3)
 ​
 # 1
 # {a:2, b:3}

此外,一个(*)号还可以解压参数列表:

 def t3(p1, p2):
         print(p1, p2)
 args = [1, 2]
 t3(*args)
 ​
 # 1 2

最后,还可以同时使用一个(*)和( )**

 def t4(a, b=10, *args, **kwargs):
         print(a)
         print(b)
         print(args)
         print(kwargs)
 t4(1, 2, 3, 4, e=5, f=6, g=7)
 ​
 # 1
 # 2
 # 3 4
 # {'e': 5, 'g': 7, 'f': 6}

\