第十章 函数
91. 函数参数定义-个数可变的位置形参-个数可变的关键字形参
86. 函数的定义与调用
(1)什么是函数
· 函数就是执行特定任务和用以完成特定功能的一段代码
(2)为什么需要函数
· 复用代码
· 隐藏实现细节
· 提高可维护性
· 提高可读性便于调试
(3)函数的创建 (函数名 自己定 要遵循:字母、数字、下划线)
def 函数名 ( [输入参数]) :
函数体
[return xxx]
print('--------------------86. 函数的定义与调用------------------')
def calc(a,b): # a,b 称为形式参数,简称形参,形参的位置是在函数的定义处
c=a+b
return c
print('(1)位置实参 — 根据形参对应的位置进行实参传递')
result=calc(10,20) # 10,20 称为实际参数的值,简称实参,实参的位置是函数的调用处
print(result)
print('(2)关键字实参 — 根据形参名称进行实参传递')
res=calc(b=10,a=20) #左侧的变量的名称称为 关键字参数
print(res)
--------------------86. 函数的定义与调用------------------
(1)位置实参 — 根据形参对应的位置进行实参传递
30
(2)关键字实参 — 根据形参名称进行实参传递
30
87. 函数调用的参数传递-位置实参-关键字实参
(1)位置实参 —— 根据形参对应的位置进行实参传递
(2)关键字实参 —— 根据形参名称进行实参传递
88. 函数参数传递的内存分析
(1)形式参数和实际参数的名称可以不相同
(2)在函数调用过程中,进行参数的传递。
- 如果是不可变对象,在函数体的修改不会影响实参的值
- 如果是可变对象,在函数体内的修改会影响实参的值
不可变的那种,形参和实参都指向同一块地址,但是你对形参改变值改变的是形参的引用。地址内的值不可变。
可变的那种指向的地址的值可以改变,所以形参可以直接改变里面的值。引用,引用的是变量,不是形参的引用。可变的会改变,不可变的不会改变。
print('--------------------88. 函数参数传递的内存分析------------------')
def fun(arg1,arg2):
print('arg1=',arg1)
print('arg2=',arg2)
arg1=100
arg2.append(10)
print('arg1=',arg1)
print('arg2=',arg2)
#因为未返回任何结果,所以可以省略return,或者直接写个 return 也行
return
print('函数的调用')
n1=11
n2=[22,33,44]
print('n1=',n1)
print('n2=',n2)
fun(n1,n2) #位置传参,arg1,arg2是函数定义处的形参,n1,n2是函数调用处的实参。总结,实参名称与形参名称可以不一致
print('n1=',n1)
print('n2=',n2)
#可以理解为def是定义封装了一个公式参与计算,可以改变计算结果,arg1在函数体内赋值,跟最后n1输出没有关系。arg2在函数体内重新计算传递给n2
print('''在函数调用过程中,进行参数的传递。
如果是不可变对象,在函数体的修改不会影响实参的值 arg1修改为100,不会影响n1值
如果是可变对象,在函数体内的修改会影响实参的值 arg2修改,影响了n2的值
''')
--------------------88. 函数参数传递的内存分析------------------
函数的调用
n1= 11
n2= [22, 33, 44]
arg1= 11
arg2= [22, 33, 44]
arg1= 100
arg2= [22, 33, 44, 10]
n1= 11
n2= [22, 33, 44, 10]
在函数调用过程中,进行参数的传递。
如果是不可变对象,在函数体的修改不会影响实参的值 arg1修改为100,不会影响n1值
如果是可变对象,在函数体内的修改会影响实参的值 arg2修改,影响了n2的值
89. 函数的返回值
<