系统相关
首页 > 系统相关> > python06-函数内存图、作用域、实参、形参

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