代码示例
先说一个*号
def function(x,*y):
sum = 0 #接收的变量要先定义一个初始值
for h in y:
sum = sum + h
sum = sum + x
print sum
return sum
num1 = {1:8,2:9.0,30:3}
num2 = (5,)
num3 = [6]
num4 = [1,3.0,6]
num5 = [] #num =None ,用None Type是不允许的
function(10,*num1)
function(10,*num2)
function(10.58,*num3)
function(10,)
function(10,*num4)
function(10,*num5)
# error ,y=2不可以直接传给*y#
function(x=1,y=2)
代码说明了几个问题
- 函数原型中的 *y 参数,可以接收的范围包括: list, tuple, dict, 数据类型(int 或 float都行), 这些序列都可以为空,但是不能传入None类型 , dict 只会在key值为数据类型时,把key值相加
- 如果去打印,可以看到 *y接收近来的数据会自动转换成一个元组类型 tuple,也就是说在for h in y时,是从y这个元组里取数据,输出结果
- 可变参数 *y 是可以包含空序列的()
- 不能直接将序列传入,也就是说,类似于 function(10, (1,2,3)) 或 function(10,[1,2,3]) 是不允许的, 但是可以调用 function(10)或function(10,)来表示空。结果如图:
** 两个型号表示“关键字传递”,毫无疑问是针对字典dict
def person(name, age, **kw):
print 'name:', name, 'age:', age, 'other:', kw
person('Mike',28)
person('Mike',28,key="value")
person('Mike',28,key="value",A=7)
- 如图上面
*y
一样,**也可以传递空的字典 -
**kw
支持多个Key:value
输入,中间用逗号隔开。
因为dict是无序序列,因此输出时候不会按照你输入的key排列,下列输出效果所示(和输入相反)