show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- time 是一个
module
- import time 可以做 和时间相关的 事情
- time.time()
- 得到 当前时间戳
- 也就是 Epoch
- time.localtime()
- local为本地
- 得到 本地时间元组
- time.asctime()
- asc 为 ascii
- 得到 时间日期字符串
- 完整写法为
- 三个函数层层嵌套
- asc_time = time.asctime(time.localtime(time.time()))
- 简略的写法为
- asc_time = time.asctime()
-
可以自己定义层层嵌套的函数吗?
-
都是层层嵌套调用
-
一层层嵌套的
-
这次我们来画一颗松树
- 松树可以分成两块
- 树冠
- 树干
- 那么我们来定义函数
- 具体怎么画呢?
- 可以出现
- 但是有点像一个箭头
draw_pine_triangle
专门画三角
def draw_pine():
draw_pine_head()
draw_pine_body()
def draw_pine_head():
draw_pine_triangle()
draw_pine_triangle()
def draw_pine_triangle():
for i in range(6):
for j in range(6-i):
print(" ",end="",sep="")
for k in range(2*i+1):
print("*",end="",sep="")
print()
def draw_pine_body():
for i in range(5):
for j in range(5):
print(" ",end="",sep="")
for k in range(3):
print("*",end="",sep="")
print()
for i in range(6):
for j in range(6-i):
print(" ",end="",sep=",")
if __name__ == '__main__':
draw_pine()
- 效果还可以
- 不过太固定了
- 可以给一个数量参数
- 来决定树的大小么?
- 我们试着调试一下
- step into
draw_pine_triangle
- 我们一步步step into进去之后
- 看到一层层函数的调用
- 压成的一个函数堆栈
- 好像一层层下命令
- 当然上面还有python来对draw_pine调用(call)
- 函数调用就像一个大蒲扇
- 从主干开始
- 有各种分支
- 最终最主要的还是主干
- 就像天津海河
- 天津号称
- 九河下梢天津卫
- 三道浮桥两道关
- 无数支流汇成九条河
- 九条河汇成海河入海
- 海河虽然很短
- 起名字还得是海河水系
- 他是汇总
- 起关键作用
- 就像大蒲扇的手柄
- 从汇编如何理解?
1 0 LOAD_CONST 0 (<code object draw_pine at 0x7f9af2bcd2f0, file "pine.py", line 1>)
2 LOAD_CONST 1 ('draw_pine')
4 MAKE_FUNCTION 0
6 STORE_NAME 0 (draw_pine)
5 8 LOAD_CONST 2 (<code object draw_pine_head at 0x7f9af2bcd450, file "pine.py", line 5>)
10 LOAD_CONST 3 ('draw_pine_head')
12 MAKE_FUNCTION 0
14 STORE_NAME 1 (draw_pine_head)
9 16 LOAD_CONST 4 (<code object draw_pine_triangle at 0x7f9af2bcd5b0, file "pine.py", line 9>)
18 LOAD_CONST 5 ('draw_pine_triangle')
20 MAKE_FUNCTION 0
22 STORE_NAME 2 (draw_pine_triangle)
18 24 LOAD_CONST 6 (<code object draw_pine_body at 0x7f9af2bcd710, file "pine.py", line 18>)
26 LOAD_CONST 7 ('draw_pine_body')
28 MAKE_FUNCTION 0
30 STORE_NAME 3 (draw_pine_body)
29 32 LOAD_NAME 4 (__name__)
34 LOAD_CONST 8 ('__main__')
36 COMPARE_OP 2 (==)
38 POP_JUMP_IF_FALSE 48
30 40 LOAD_NAME 0 (draw_pine)
42 LOAD_CONST 9 (9)
44 CALL_FUNCTION 1
46 POP_TOP
>> 48 LOAD_CONST 10 (None)
50 RETURN_VALUE
Disassembly of <code object draw_pine at 0x7f9af2bcd2f0, file "pine.py", line 1>:
2 0 LOAD_GLOBAL 0 (draw_pine_head)
2 LOAD_FAST 0 (n)
4 CALL_FUNCTION 1
6 POP_TOP
3 8 LOAD_GLOBAL 1 (draw_pine_body)
10 LOAD_FAST 0 (n)
12 CALL_FUNCTION 1
14 POP_TOP
16 LOAD_CONST 0 (None)
18 RETURN_VALUE
Disassembly of <code object draw_pine_head at 0x7f9af2bcd450, file "pine.py", line 5>:
6 0 LOAD_GLOBAL 0 (draw_pine_triangle)
2 LOAD_FAST 0 (n)
4 CALL_FUNCTION 1
6 POP_TOP
7 8 LOAD_GLOBAL 0 (draw_pine_triangle)
10 LOAD_FAST 0 (n)
12 CALL_FUNCTION 1
14 POP_TOP
16 LOAD_CONST 0 (None)
18 RETURN_VALUE
Disassembly of <code object draw_pine_triangle at 0x7f9af2bcd5b0, file "pine.py", line 9>:
10 0 LOAD_GLOBAL 0 (range)
2 LOAD_FAST 0 (n)
4 LOAD_CONST 1 (1)
6 BINARY_ADD
8 CALL_FUNCTION 1
10 GET_ITER
>> 12 FOR_ITER 82 (to 96)
14 STORE_FAST 1 (i)
11 16 LOAD_GLOBAL 0 (range)
18 LOAD_FAST 0 (n)
20 LOAD_CONST 1 (1)
22 BINARY_ADD
24 LOAD_FAST 1 (i)
26 BINARY_SUBTRACT
28 CALL_FUNCTION 1
30 GET_ITER
>> 32 FOR_ITER 18 (to 52)
34 STORE_FAST 2 (j)
12 36 LOAD_GLOBAL 1 (print)
38 LOAD_CONST 2 (' ')
40 LOAD_CONST 3 ('')
42 LOAD_CONST 3 ('')
44 LOAD_CONST 4 (('end', 'sep'))
46 CALL_FUNCTION_KW 3
48 POP_TOP
50 JUMP_ABSOLUTE 32
13 >> 52 LOAD_GLOBAL 0 (range)
54 LOAD_CONST 5 (2)
56 LOAD_FAST 1 (i)
58 BINARY_MULTIPLY
60 LOAD_CONST 1 (1)
62 BINARY_ADD
64 CALL_FUNCTION 1
66 GET_ITER
>> 68 FOR_ITER 18 (to 88)
70 STORE_FAST 3 (k)
14 72 LOAD_GLOBAL 1 (print)
74 LOAD_CONST 6 ('*')
76 LOAD_CONST 3 ('')
78 LOAD_CONST 3 ('')
80 LOAD_CONST 4 (('end', 'sep'))
82 CALL_FUNCTION_KW 3
84 POP_TOP
86 JUMP_ABSOLUTE 68
15 >> 88 LOAD_GLOBAL 1 (print)
90 CALL_FUNCTION 0
92 POP_TOP
94 JUMP_ABSOLUTE 12
>> 96 LOAD_CONST 0 (None)
98 RETURN_VALUE
Disassembly of <code object draw_pine_body at 0x7f9af2bcd710, file "pine.py", line 18>:
19 0 LOAD_GLOBAL 0 (range)
2 LOAD_FAST 0 (n)
4 CALL_FUNCTION 1
6 GET_ITER
>> 8 FOR_ITER 66 (to 76)
10 STORE_FAST 1 (i)
20 12 LOAD_GLOBAL 0 (range)
14 LOAD_FAST 0 (n)
16 CALL_FUNCTION 1
18 GET_ITER
>> 20 FOR_ITER 18 (to 40)
22 STORE_FAST 2 (j)
21 24 LOAD_GLOBAL 1 (print)
26 LOAD_CONST 1 (' ')
28 LOAD_CONST 2 ('')
30 LOAD_CONST 2 ('')
32 LOAD_CONST 3 (('end', 'sep'))
34 CALL_FUNCTION_KW 3
36 POP_TOP
38 JUMP_ABSOLUTE 20
22 >> 40 LOAD_GLOBAL 0 (range)
42 LOAD_CONST 4 (3)
44 CALL_FUNCTION 1
46 GET_ITER
>> 48 FOR_ITER 18 (to 68)
50 STORE_FAST 3 (k)
23 52 LOAD_GLOBAL 1 (print)
54 LOAD_CONST 5 ('*')
56 LOAD_CONST 2 ('')
58 LOAD_CONST 2 ('')
60 LOAD_CONST 3 (('end', 'sep'))
62 CALL_FUNCTION_KW 3
64 POP_TOP
66 JUMP_ABSOLUTE 48
24 >> 68 LOAD_GLOBAL 1 (print)
70 CALL_FUNCTION 0
72 POP_TOP
74 JUMP_ABSOLUTE 8
25 >> 76 LOAD_GLOBAL 0 (range)
78 LOAD_FAST 0 (n)
80 LOAD_CONST 6 (1)
82 BINARY_ADD
84 CALL_FUNCTION 1
86 GET_ITER
>> 88 FOR_ITER 40 (to 130)
90 STORE_FAST 1 (i)
26 92 LOAD_GLOBAL 0 (range)
94 LOAD_FAST 0 (n)
96 LOAD_CONST 6 (1)
98 BINARY_ADD
100 LOAD_FAST 1 (i)
102 BINARY_SUBTRACT
104 CALL_FUNCTION 1
106 GET_ITER
>> 108 FOR_ITER 18 (to 128)
110 STORE_FAST 2 (j)
27 112 LOAD_GLOBAL 1 (print)
114 LOAD_CONST 1 (' ')
116 LOAD_CONST 2 ('')
118 LOAD_CONST 7 (',')
120 LOAD_CONST 3 (('end', 'sep'))
122 CALL_FUNCTION_KW 3
124 POP_TOP
126 JUMP_ABSOLUTE 108
>> 128 JUMP_ABSOLUTE 88
>> 130 LOAD_CONST 0 (None)
132 RETURN_VALUE
- 定义了四个函数
- 函数可以调用函数
- 每个函数有自己的代码段
- 从零开始
- 完成一系列指令
- 产生返回返回值
- 并且return回到调用的位置
- 继续进行
- 为什么要搞成这样一层层的呢?
- 我们先去总结一下
- 我们这次完成了画松树工作
- 通过一层层的工作的细分
- 定义了五个函数
- 然后使用函数调用完成工作
- 每个函数都有自己的代码段
- 负责各自的任务
- 如何理解这个职业分工各司其职呢?🤔
- 我们下次再说👋