网站 解决负载,北京装饰公司招聘工长,甘肃cms建站系统哪家好,英文外贸网站 php源码一、形参和实参
函数参数的作用是传递数据给函数使用。
在使用的过程中#xff0c;参数有两种形式#xff1a;形式参数和实际参数
形参#xff1a;定义函数时的参数
实参#xff1a;调用函数时的参数
根据实际参数类型不同#xff0c;将实际参数传递给形参的方式有两种参数有两种形式形式参数和实际参数
形参定义函数时的参数
实参调用函数时的参数
根据实际参数类型不同将实际参数传递给形参的方式有两种值传递和引用传递
值传递实参为不可变对象传递给形参后形参的值改变实参值不变。如funa传递的只是a的值没有影响a对象本身。比如在 funa内部修改 a 的值只是修改另一个复制的对象不会影响 a 本身。
引用传递实参为可变对象传递给形参后形参的值改变实参值改变。如 funla则是将 la 真正的传过去修改后fun外部的la也会受影响
#值传递与引用传递
defdemo(obj):printobj
objobj
obj1123456demo(obj1)print 函数调用后obj1obj1
obj2[1,2,3]
demo(obj2)print 函数调用后obj2str(obj2)#结果
123456函数调用后obj1123456[1, 2, 3]
函数调用后obj2[1, 2, 3, 1, 2, 3]
二、位置参数、关键字参数、默认参数、可变参数
1.位置参数必备参数
函数调用时的数量位置参数类型必须和定义时的一致。
2.关键字参数
函数调用时使用形参的名字输入的参数值此时位置可与定义时不一致。
3.默认参数
函数定义时为参数设置一个默认值当函数调用时没有传入这个参数值直接使用这个默认值。注意
定义函数时默认参数必须指向不可变对象如果指向可变对象多次调用可能得到的不是意料之内的结果。
#默认参数必须指向不可变对象如果指向可变对象结果不对
def demo1(obj[]):printobj
obj.append(1)def demo2(objNone):if objNone:
obj[]printobj
obj.append(1)
demo1()
demo1()
demo1()
demo2()
demo2()
demo2()#结果
[]
[1]
[1, 1]
[]
[]
[]
4.可变参数不定长参数
可变参数有两种形式一种是*args,另一种是**kwargs
*args这种形式表示接受任意多个实际参数将其放到一个元组中。
**kwargs这种形式表示接受任意多个实际参数将其放到一个字典中类似关键字参数
#可变参数#*args形式
def demo3(*args):print \n I like coffee:
for i inargs:printi,#调用形式可直接传一个tuple
demo3(巴西,土耳其)#也可以通过list或者tuple的变量传
obj1[蓝山,摩卡,卡布奇诺]
demo3(*obj1)#**kwargs形式
def person(name, age, **kw):print\n name:, name, age:, age, other:, kwdef demo4(**kwargs):print \n name:age
for i,j inkwargs.items():print i,:,j#调用可直接传一个字典
person(Paul,77,sexmale,jobteacher)#也可以通过字典变量传
obj2{Mary:23,HanMeiMei:34,Lily:12}
demo4(**obj2)#结果
I like coffee:
巴西 土耳其
I like coffee:
蓝山 摩卡 卡布奇诺
name: Paul age:77 other: {job: teacher, sex: male}
name:age
Lily :12Mary :23HanMeiMei :34
三、参数组合
在Python中定义函数可以用必选参数、默认参数、可变参数、关键字参数组合使用。但是注意参数定义的顺序必须是必选参数、默认参数、可变参数、关键字参数。