目录
1.变量作用域
2.函数执行过程
2.1链式调用
2.2嵌套调用
2.3函数递归
3.参数默认值
4.关键字参数
1.变量作用域
观察以下代码:
def getPoint(): x = 10 y = 20 return x, y x, y = getPoint()def getPoint(): x = 10 y = 20 return x, y getPoint() print(x, y)x = 20 def test(): x = 10 print(f'函数内部 x = {x}') test() print(f'函数外部 x = {x}')x = 20 def test(): global x x = 10 print(f'函数内部 x = {x}') test() print(f'函数外部 x = {x}')for i in range(1, 10): print(f'函数内部 i = {i}') print(f'函数外部 i = {i}')2.函数执行过程
def test(): print("执行函数内部代码") print("执行函数内部代码") print("执行函数内部代码") print("1111") test() print("2222") test() print("3333")2.1链式调用
# 判定是否是奇数 def isOdd(num): if num % 2 == 0: return False else: return True result = isOdd(10) print(result)print(isOdd(10))2.2嵌套调用
def test(): print("执行函数内部代码") print("执行函数内部代码") print("执行函数内部代码")def a(): print("函数 a") def b(): print("函数 b") a() def c(): print("函数 c") b() def d(): print("函数 d") c() d()def a(): print("函数 a") def b(): a() print("函数 b") def c(): b() print("函数 c") def d(): c() print("函数 d") d()def a(): num1 = 10 print("函数 a") def b(): num2 = 20 a() print("函数 b") def c(): num3 = 30 b() print("函数 c") def d(): num4 = 40 c() print("函数 d") d()选择不同的栈帧,就可以看到各自栈帧中的局部变量
2.3函数递归
def factor(n): if n == 1: return 1 return n * factor(n - 1) result = factor(5) print(result)注意:递归代码务必要保证存在递归结束条件.比如if n == 1就是结束条件.当n为1的时候,递归就结束了.每次递归的时候,要保证函数的实参是逐渐逼近结束条件的.如果上述条件不能满足,就会出现"无限递归" .这是一种典型的代码错误
def factor(n): return n * factor(n - 1) result = factor(5) print(result)3.参数默认值
def add(x, y, debug=False): if debug: print(f'调试信息: x={x}, y={y}') return x + y print(add(10, 20)) print(add(10, 20, True))def add(x, debug=False, y): if debug: print(f'调试信息: x={x}, y={y}') return x + y print(add(10, 20))4.关键字参数
def test(x, y): print(f'x = {x}') print(f'y = {y}') test(x=10, y=20) test(y=100, x=200)