自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501
在调用函数时,大多数情况下,主调函数和被调用函数之间有数据传递关系,这就是有参数的函数形式。函数参数的作用是传递数据给函数使用,函数利用接收的数据进行具体的操作处理。
函数参数在定义函数时放在函数名称的后面的一对小括号中,如图5所示。
图5 函数参数
在使用函数时,经常会用到形式参数和实际参数,二者都叫作参数,它们的区别将先通过形式参数与实际参数的作用来进行讲解,再通过一个比喻和实例进行深入探讨。
(1)通过作用理解
形式参数和实际参数在作用上的区别如下:
l 形式参数:在定义函数时,函数名后面括号中的参数为“形式参数”。
l 实际参数:在调用一个函数时,函数名后面括号中的参数为“实际参数”,也就是将函数的调用者提供给函数的参数称为实际参数。通过图6可以更好地理解。
图6 形式参数与实际参数
根据实际参数的类型不同,可以分为将实际参数的值传递给形式参数和将实际参数的引用传递给形式参数两种情况。其中,当实际参数为不可变对象时,进行值传递;当实际参数为可变对象时,进行的是引用传递。实际上,值传递和引用传递的基本区别就是,进行值传递后,改变形式参数的值,实际参数的值不变;而进行引用传递后,改变形式参数的值,实际参数的值也一同改变。
例如,定义一个名称为demo的函数,然后为demo()函数传递一个字符串类型的变量作为参数(代表值传递),并在函数调用前后分别输出该字符串变量,再为demo()函数传递一下列表类型的变量作为参数(代表引用传递),并在函数调用前后分别输出该列表。代码如下:
# 定义函数
def demo(obj):
print("原值:",obj)
obj += obj
# 调用函数
print("=========值传递========")
mot = "唯有在被追赶的时候,你才能真正地奔跑。"
print("函数调用前:",mot)
demo(mot) # 采用不可变对象―字符串
print("函数调用后:",mot)
print("=========引用传递 ========")
list1 = ['绮梦','冷伊一','香凝','黛兰']
print("函数调用前:",list1)
demo(list1) # 采用可变对象―列表
print("函数调用后:",list1)
上面代码的执行结果如下:
=========值传递========
函数调用前: 唯有在被追赶的时候,你才能真正地奔跑。
原值: 唯有在被追赶的时候,你才能真正地奔跑。
函数调用后: 唯有在被追赶的时候,你才能真正地奔跑。
=========引用传递 ========
函数调用前: ['绮梦', '冷伊一', '香凝', '黛兰']
原值: ['绮梦', '冷伊一', '香凝', '黛兰']
函数调用后: ['绮梦', '冷伊一', '香凝', '黛兰', '绮梦', '冷伊一', '香凝', '黛兰']
从上面的执行结果中可以看出,在进行值传递时,改变形式参数的值后,实际参数的值不改变;在进行引用传递时,改变形式参数的值后,实际参数的值也发生改变。
(2)通过一个比喻来理解形式参数和实际参数
函数定义时参数列表中的参数就是形式参数,而函数调用时传递进来的参数就是实际参数。就像剧本选主角一样,剧本的角色相当于形式参数,而演角色的演员就相当于实际参数。
场景模拟:第2章的实例01实现了根据身高和体重计算BMI指数,但是这段代码只能计算一个固定的身高和体重(可以理解为一个人的),如果想要计算另一个人的身高和体重对应的BMI指数,那么还需要把这段代码重新写一遍。如果把这段代码定义为一个函数,那么就可以计算多个人的BMI指数了。
实例02 根据身高、体重计算BMI指数(共享版)
在IDLE中创建一个名称为function_bmi.py的文件,然后在该文件中定义一个名称为fun_bmi的函数,该函数包括3个参数,分别用于指定姓名、身高和体重,再根据公式:BMI=体重/(身高×身高)计算BMI指数,并输出结果,最后在函数体外调用两次fun_bmi函数,代码如下:
def fun_bmi(person,height,weight):
'''功能:根据身高和体重计算BMI指数
person:姓名
height:身高,单位:米
weight:体重,单位:千克
'''
print(person + "的身高:" + str(height) + "米 \t 体重:" + str(weight) + "千克")
bmi=weight/(height*height) # 用于计算BMI指数,公式为:BMI=体重/身高的平方
print(person + "的BMI指数为:"+str(bmi)) # 输出BMI指数
# 判断身材是否合理
if bmi<18.5:
print("您的体重过轻 ~@_@~\n")
if bmi>=18.5 and bmi<24.9:
print("正常范围,注意保持 (-_-)\n")
if bmi>=24.9 and bmi<29.9:
print("您的体重过重 ~@_@~\n")
if bmi>=29.9:
print("肥胖 ^@_@^\n")
# *****************************调用函数*********************************** #
fun_bmi("路人甲",1.83,60) # 计算路人甲的BMI指数
fun_bmi("路人乙",1.60,50) # 计算路人乙的BMI指数
运行结果如图7所示。
图7 根据身高、体重计算BMI指数
从该实例代码和运行结果可以看出:
(1)定义一个根据身高、体重计算BMI指数的函数fun_bmi(),在定义函数时指定的变量person、height和weight称为形式参数。
(2)在函数fun_bmi()中根据形式参数的值计算BMI指数,并输出相应的信息。
(3)在调用fun_bmi()函数时,指定的“路人甲”、1.83和60等都是实际参数,在函数执行时,这些值将被传递给对应的形式参数。