阅读目录:
1、函数的返回值
2、函数嵌套
3、作用域 ***
4、闭包**
5、nonlocal 关键字
6、默认值的作用域
7、变量名解析原则LEGB
8、函数的销毁
内容:
1、函数的返回值:
单条 return 语句:
1 def showplus(x): 2 print(x) 3 return x + 1 4 5 showplus(5) 6 7 8 def showplus(x): 9 print(x) 10 return x + 1 11 print(x+1) # 不会被执行,因为之前出现了return 并执行了 return语句 12 13 showplus(5)
多条 return 语句:
1 # def guess(x): 2 # if x > 3: 3 # return "> 3" 4 # else: 5 # return " <= 3" 6 # print(guess(10)) # > 3 7 8 def showplus(x): 9 print(x) 10 return x+1 11 return x+2 # 不被执行 12 showplus(5) 13 14 15 def fn(x): 16 for i in range(x): 17 if i > 3: 18 return i 19 else: 20 print('-', i) 21 22 print(fn(5)) # 4 23 print(fn(3)) # 24 25 # - 2 26 # None
总结:
- Python 函数使用 return 语句返回“返回值”
- 所有函数都有返回值,如果没有return 语句,隐式调用return None
- return 语句并不一定是函数的语句块的最后一条语句
- 一个函数可以存在多条return语句,但是只有一条被执行,乳沟哦没有一条return 语句被执行到隐式调用return None
- 如果有必要,可以显示调用return None,可以简写为return。
- 如果函数执行了return 语句,函数就会返回,当前被执行的return 语句之后的其他语句就不会被执行了
- 作用:结束函数调用,返回值
返回多个值 ???:return 是无法返回多个值的!,一次只能返回一个 ,返回类型根据具体情况而定!
1 def showplus(): 2 return [1,2,3] # [1, 2, 3] 3 def showplus(): 4 return 1,2,3 # (1, 2, 3) 5 6 print(showplus())
总结:
-
-
- 函数是 不能同时返回多个值
- return [12,3,4] 是指明返回一个列表,是一个列表对象
- return 1,,2,3 看似返回多个值,隐式的被python 封装成一个元组
-
1 def showplus(): 2 return 1,2,3 # (1, 2, 3) 3 4 print(showplus()) 5 a,b,c = showplus() 6 print(a, b, c) # 1 2 3
2、函数嵌套
在一个函数中定义了另外一个函数
1 def outer(): 2 def inner(): 3 print('inner') 4 print('outer') 5 inner() 6 outer() # 可以调用 outer() 7 inner() # 调用不到inner()
函数有可见范围,这就是“作用域”的概念。
内部函数不能再外部直接使用,会抛NameError 异常,因为 它 不可见。
3、作用域 ***
作用域:
一个标识符的可见范围,这就是标识符的作用域,一般常说的是变量的作用域。
常见作用域可能出现的问题:
1 # NO 1 2 x = 5 3 4 def foo(): 5 print(x) 6 7 foo() # 是可见的 8 9 # NO 2 10 x = 5 11 12 def foo(): 13 # UnboundLocalError: local variable 'x' referenced before assignment 14 x += 1 # 不可见的 15 print(x) 16 foo() 17 18 # NO 3 19 def foo(): 20 a = 10 21 print(x)# 4 22 x = 4 23 24 foo()# 是可以看到的,正常打印 25 26 # NO 4 27 x = 5 28 29 def show(): 30 ## 在函数内部再次使用 = 的时候,要注意,此时这个变量变为 local 变量 31 ## 赋值即被重新定义,即,赋值的时候,x 不知道多少,所以会报错 32 x += 1 # 报错, 33 print(x) 34 35 show() 36 37 # NO 6 38 x = 6 39 40 def show(): 41 print(x) 42 x += 1 # 跟上一个报错一样 # UnboundLocalError: local variable 'x' referenced before assignment 43 44 show() 45 46 # NO 7 47 x = 5 48 49 def show(x):# 同样报错,x此时还是局部变量,但是没有先定义,直接打印 50 print(x) 51 x += 1 52 print(x) 53 54 show(4) 55 56 # NO 8 57 x = 5 58 59 def show(x):# 相当于给了一个局部变量x = 4 60 print(x) # 4 61 x = 1 62 print(x) # 1 63 64 show(4) # 传参 65 print(x) # 5 66 67 # NO 9 68 x = 5 # 赋值即定义 69 70 def show(): 71 print(x) # 报错,赋值定义 应该 在打印之后 72 x = 1 73 74 show() 75 76 77 78 79 80 81 82