一步一步学Python3(小学生也适用) 第二十篇:函数形参与实参

it2023-11-04  71

在上一篇中,我们定义了,一个返回两个数中较大数的函数

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) 36就是实际参数,在函数调用时,把36传递到调用函数,替换函数语句块中的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已作改变。

结束语:

这一篇,我们仅仅讲了函数的形参和实参,并且用例子来说明,把实参传入函数中的形参的过程。以及参数传递时,值传递和引用传递的特点。

下一篇,我们将继续来讲函数的知识。

最新回复(0)