# 函数基础
# 调用函数
# Calling Functions Within Functions
“The body of a function can contain anything, including function calls.”
-- futurecoder
# 1 我们从下列函数入手,来看看在函数中调用函数,是如何进行的?
def print_many(n, thing):
for _ in range(n):
print(thing)
def print_twice(x):
print_many(2, x)
print_twice("Hello")
-- 1 案例解析, 以下既是在print_twice函数中调用print_many函数,以及参数传递的过程。如果一遍看不懂,就多看几遍。
1 | def print_many(n, thing):
5 | def print_twice(x):
8 | print_twice("Hello")
>>> 调用print_twice函数 line 5
...... x = 'Hello'
5 | def print_twice(x):
6 | print_many(2, x)
>>> 调用 print_many函数 line 1
...... n = 2
...... thing = 'Hello'
1 | def print_many(n, thing):
2 | for _ in range(n):
.......... _ = 0
3 | print(thing)
Hello
2 | for _ in range(n):
.......... _ = 1
3 | print(thing)
Hello
2 | for _ in range(n):
<<< print_many函数返回值: None
6 | print_many(2, x)
<<< print_twice函数返回值: None
8 | print_twice("Hello")
-- 1 我们再来详细的分析下,运用Debug的方式进入到这段代码内部一探究竟。
第一步,程序从第一行开始执行代码,我们告诉程序我们新建了两个函数对象,并给函数传值
如图所示,Frams代表电脑的存储器,存储这两个函数print_many和print_twice,Objects代表函数对象,也就是函数本身。
第二步,开始调用print_twice函数,并给参数X赋值"Hello"
第三步,开始调用print_many函数,并给参数N和thing分支赋值2,"Hello"
第四步,开始执行for循环,到这里就回到我们熟悉的地方,开始从0迭代,迭代两次,则输出两次"Hello"。
至此,程序运行结束,主要是理解函数参数的传递,对参数流向哪里要重点知道。不要被程序的表象迷惑。