函数的参数
在定义函数时,参数表中的参数称为形式参数,也称形参。
调用函数时,参数表中提供的参数称为实际参数,也称实参。
Python中的变量保存的是对象的引用,调用函数的过程就是将实参传递给形参的过程。
函数调用时,实参可以分为位置参数和赋值参数两种情况
1 位置参数
函数调用时,默认情况下,实参将按照位置顺序传递给形参。
def getvolume(r,h):
print("圆的体积是:{:>8.2f}".format(3.14*r*r*h))
2 赋值参数
通常情况下,函数调用时,实参默认采用按照位置顺序的方式传递函数。如果参数很多,按位置传递参数的方式可读性较差。
如果只看实际调用而不看函数定义,则很难理解这些参数的实际含义。在规模较大的程序中,函数定义可能在函数库中,也可能与调用函数相距甚远,因而可读性较差。
为了解决上述问题, Python 提供了按照形参名称输人实参的方式,这种参数称为赋值参数。
例 1 使用赋值参数计算总分 :
>>> def getscore (pe,eng,math,phy,chem):
return pe *0.5+ eng *1+ math *1.2+ phy *1+ chem *1
>>> getscore (93,89,78,89,72) #按位置传递
390.1
>>> getscore ( pe =93, math =78, chem =72, eng =89, phy =89)#使用赋值参数390.
390.1
3 参数值的类型
参数值的类型是指函数调用时,传递的实际参数是基本数据类型还是组合数据类型。参数类型不同,在函数调用后,参数值的变化也是不同的。
例 2 基本数据类型作为实参进行参数传递:
>>> a = 10 #全局变量
>>> def func(num):
num += 1
print("形参的地址{}".format(id(num)))
print("形参的值{}".format(num))
a = 1 #局部变量吗,只在函数内部有效
>>> func(a)
形参的地址140710772266336
形参的值11
>>> a,id(a) #函数调用后,变量a的值不发生变化
(10, 140710772266304)
如果想在函数中修改实参 a 的值,需要使用关键字 global 声明。
列表、元组、字典等组合数据类型的变量用作函数参数时,这些变量在函数体外,是全局变量。形参和实参之间传递的只是组合数据类型变量的地址(引用),如果在函数内部修改了参数的值,参数的地址是不发生改变的,这种修改将影响到外部的全局变量。
例 3 组合数据类型作为实参进行参数传递:
#计算序列中的奇数,保存到参数ls1中
>>> tup=()
>>> tup=(1,5,7,8,12,9)
>>> ls=[]
>>> def getodd(tup1,ls1): #参数为组合数据类型
for i in tup1:
if i%2:
ls1.append(i)
return ls1
>>> getodd(tup,ls) #函数调用前后, ls的值发生了变化,但 id 值不变
[1, 5, 7, 9]
>>> print(ls)
[1, 5, 7, 9]