在上一篇中,我们定义了,一个返回两个数中较大数的函数
def num_max(num1,num2):
num = 0
if num1 > num2:
num = num1
print('num1比较大')
else:
num = num2
print('num2比较大')
return num
然后调用时是
n = num_max(3,6)
在上面的例子中,我们需要知道Python函数的形式参数和实际参数的概念
一、实际参数和形式参数
形式参数(形参):顾名思义,形式上的参数,可以理解为占位符,没有实际的值,占一个位,通过调用函数时,在该位置赋值,才有值。相当于变量。
实际参数(实参):顾名思义,实际意义上的参数。是一个实际存在的参数,调用函数时传给函数的参数。
形式
形式参数:在定义函数时,函数名后面括号中的参数。上述例子中:
def num_max(num1,num2) num1和num1就是形式上参数,没有实际的值
实际参数:在调用函数时,函数名后面括号中的参数。上述例子中:
n = num_max(3,6)
3和6就是实际参数,在函数调用时,把3和6传递到调用函数,替换函数语句块中的num1和num2
我们修改一下上述例子,看是不是3传递给了num1,6传递给了num2
#定义函数,两个形式参数,分别为num1和num2
def num_max(num1, num2):
print('传递给num1值是:',num1) #调用函数,第一个实际参数将赋值给num1
print('传递给num2值是:', num2) #调用函数,第二个实际参数将赋值给num2
num = 0
if num1 > num2:
num = num1
else:
num = num2
return num
print('调用函数开始....')
n = num_max(3,6) #函数调用时,实际参数为3和6
print('较大的值为:',n)
运行结果:
调用函数开始....
传递给num1值是: 3
传递给num2值是: 6
较大的值为: 6
形参和实参的区别,就如果一个班里面,班长和学习委员这两个角色就是形参,小明是班长,张三是学习委员,小明,张三就是实参。 李四,王五后来做班长和学习委员时,那么李四和王五就是实参了。
二、实参传值给形参
Python中,根据实际参数的不同类型,函数参数传递方式有2种方式:值传递,引用(地址)传递值传递:实参类型为不可变类型(字符串、数字、元组)
引用(地址)传递:实参类型为可变类型(列表、字典)
值传递和引用传递的区别是,函数参数进行值传递(不可变对象)后,如果参数在函数代码块内被修改,那么这个传递的源对象不会改变;
函数参数进行引用传递(可变对象)后,如果参数在函数代码块内被修改,那么这个传递源对象也会被改变;
def fun(obj):
obj += obj
print("obj在函数内修改后为::", obj)
return
print("------值传递------")
str1 = "老树Python"
fun(str1)
print('不可变对象经函数更改后str1为:',str1)
print("------引用(地址)传递------")
list1 =["Python","Java"]
fun(list1)
print('可变对象经函数更改后List1为::', list1)
运行的结果:
------值传递------
obj在函数内修改后为:: 老树Python老树Python
不可变对象经函数更改后str1为: 老树Python
------引用(地址)传递------
obj在函数内修改后为:: ['Python', 'Java', 'Python', 'Java']
可变对象经函数更改后List1为:: ['Python', 'Java', 'Python', 'Java']
上述例子中,我们可以看到当 实参str1为字符串时,经过函数代码块改变时,外部源类型str1不作改变。
可变类型list1经过函数代码块改变后,外部源类型list1已作改变。
结束语:
这一篇,我们仅仅讲了函数的形参和实参,并且用例子来说明,把实参传入函数中的形参的过程。以及参数传递时,值传递和引用传递的特点。
下一篇,我们将继续来讲函数的知识。老树Python:一步一步学Python3(小学生也适用) 第十九篇:函数创建与调用zhuanlan.zhihu.comhttps://zhuanlan.zhihu.com/p/266411327zhuanlan.zhihu.com老树Python:一步一步学Python3(小学生也适用) 第十七篇:循环语句for in循环zhuanlan.zhihu.com老树Python:一步一步学Python3(小学生也适用) 第十六篇:循环语句While循环zhuanlan.zhihu.com老树Python:一步一步学Python3(小学生也适用) 第十五篇:条件判断zhuanlan.zhihu.com