python06-函数内存图、作用域、实参、形参
作者:互联网
一、函数内存图
1 """ 2 函数内存图 3 练习:exercise06.py 4 练习:exercise07.py 5 15:40 6 """ 7 8 # 在方法区中存储函数代码,不执行函数体 9 def fun01(a): 10 a = 100 11 12 num01 = 1 13 # 因为调用函数,所以开辟一块内存空间,叫做栈帧 14 # 用于存储在函数内部定义的变量(包含参数). 15 fun01(num01) 16 # 函数执行完毕后,栈帧立即释放(其中定义的变量也会销毁). 17 print(num01)#1 18 19 def fun02(a): 20 # 改变的是传入的可变对象 21 a[0] = 100 22 23 list01 = [1] 24 fun02(list01) 25 print(list01[0])# 100 26 27 def fun03(a): 28 # 改变的是fun03栈帧中变量a的指向 29 a = 100 30 31 32 list01 = [1] 33 fun03(list01) 34 print(list01[0])# 1 35 36 37 def fun04(a): 38 a[1] = [200] 39 40 list01 = [1,[2,3]] 41 fun04(list01) 42 print(list01[1])# [200]
二、作用域
1 """ 2 作用域 3 练习:exercise08.py 4 """ 5 # 全局变量 6 g01 = "ok" 7 8 # print(l01) 9 def fun01(): 10 # 局部变量:在函数内部定义的变量 11 l01 = 100 12 # print(l01) 13 print(l01) 14 # 在函数内部可以读取全局变量 15 # print(g01) 16 17 # 创建了一个局部变量g01,而不是修改全局变量 18 # g01 = "no" 19 20 # 定义全局变量g01 21 global g01 22 # 此时修改的是全局变量 23 g01 = "no" 24 print(g01) 25 # 定义全局变量g02 26 global g02 27 g02 = 250 28 29 30 fun01() 31 32 print(g01) # ? 33 34 print(g02)
三、实参
1 """ 2 函数参数 3 实际参数 4 """ 5 6 7 def fun01(a, b, c, d): 8 print(a) 9 print(b) 10 print(c) 11 print(d) 12 13 # 17:00 14 # 位置实参:实参与形参根据位置进行依次对应. 15 # fun01(1, 2, 3, 4) 16 17 # 关键字实参:实参与形参根据名称进行对应 18 # fun01(b=1, d=2, c=3, a=4) 19 20 # 序列实参:星号将序列拆分后按位置与形参进行对应 21 # 如果参数很多,可以存储在序列(字符串/列表/元组)中, 22 # 再通过*拆分,直接传入函数. 23 # list01 = ["a","b","c","d"] 24 # fun01(*list01) 25 26 # 字典实参:双星号将字典拆分后按名称与形参进行对应 27 # 如果参数很多,可以存储在字典中, 28 # 再通过**拆分,传入函数. 29 dict01 = {"a": 1, "c": 3, "d": 4, "b": 2} 30 fun01(**dict01)
四、形参
1 """ 2 函数参数 3 形式参数 4 练习:exercise09.py 5 练习:exercise10.py 6 """ 7 8 9 # 1. 缺省(默认)形参:如果实参不提供,可以使用默认值. 10 def fun01(a=None, b=0, c=0, d=0): 11 print(a) 12 print(b) 13 print(c) 14 print(d) 15 16 17 # 关键字实参 + 缺省形参:调用者可以随意传递参数. 18 # fun01(b=2, c=3) 19 20 # 2. 位置形参 21 def fun02(a, b, c, d): 22 print(a) 23 print(b) 24 print(c) 25 print(d) 26 27 28 # 3.星号元组形参: * 将所有实参合并为一个元组 29 # 作用:让实参个数无限 30 def fun03(*args): 31 print(args) 32 33 34 # fun03()# () 35 # fun03(1)# (1,) 36 # fun03(1,"2")# (1, '2') 37 38 # 4.命名关键字形参:在星号元组形参以后的位置形参 39 # 目的:要求实参必须使用关键字实参. 40 def fun04(a, *args, b): 41 print(a) 42 print(args) 43 print(b) 44 45 46 fun04(1, b=2) 47 fun04(1, 2, 3, 4, b=2) 48 49 50 def fun05(*, a, b): 51 print(a) 52 print(b) 53 54 55 fun05(a=1, b=2) 56 57 58 # 5. 双星号字典形参:**目的是将实参合并为字典. 59 # 实参可以传递数量无限的关键字实参. 60 def fun06(**kwargs): 61 print(kwargs) 62 63 64 fun06(a=1, b=2)
标签:形参,作用域,list01,python06,fun01,print,实参,def 来源: https://www.cnblogs.com/libotao/p/12422224.html