day010 认识函数(二)
一、命名空间和作用域
命名空间 有三种
内置命名空间 —— python解释器
就是python解释器一启动就可以使用的名字存储在内置命名空间中
内置的名字在启动解释器的时候被加载进内存里
全局命名空间 —— 我们写的代码但不是函数中的代码(py文件中)
是在程序从上到下被执行的过程中依次加载进内存的
放置了我们设置的所有变量名和函数名
局部命名空间 —— 函数
就是函数内部定义的名字
当调用函数的时候 才会产生这个名称空间 随着函数执行的结束 这个命名空间就又消失了
使用关系:全局===》局部===》内置
二、函数的嵌套
如标题字面意思:在函数中再定义个函数
1 def outer(): 2 a = 1 3 4 def inner(): 5 a = 2 6 7 def inner2(): 8 nonlocal a #声明了一个上面第一层局部变量 9 a += 1 #不可变数据类型的修改 10 11 inner2() 12 print('##a## : ', a) 13 14 inner() 15 print('**a** : ',a)
三、函数名的本质
函数名本质就是内存地址。
故可以:赋值、作为容器类型的元素、作为函数的返回值、作为函数的参数
1 a = 0 2 def outer(): 3 # a = 1 4 def inner(): 5 # a = 2 6 def inner2(): 7 nonlocal a 8 print(a) 9 inner2() 10 inner() 11 12 # outer() 13 14 def func(): 15 print(123) 16 17 # func() #函数名就是内存地址 18 func2 = func #函数名可以赋值 19 func2() 20 21 l = [func,func2] #函数名可以作为容器类型的元素 22 print(l) 23 for i in l: 24 i() 25 26 def func(): 27 print(123) 28 29 def wahaha(f): 30 f() 31 return f #函数名可以作为函数的返回值 32 33 qqxing = wahaha(func) # 函数名可以作为函数的参数 34 qqxing()
四、函数的闭包
闭包:本质是嵌套函数,是内部函数调用外部函数的变量
1 def outer(): 2 a = 1 3 def inner(): 4 print(a) 5 inner() 6 outer()
五、作业
1、写函数,接收n个数字,求这些参数数字的和
1 def my_sum(*args): 2 a = 0 3 for i in args: 4 a += i 5 return a 6 7 8 print(my_sum((1,2,3,8,23,6)))
2、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
1 a=10 2 b=20 3 def test5(a,b): 4 print(a,b) 5 c = test5(b,a) 6 print(c)
3、读代码,回答:代码中,打印出来的值a,b,c分别是什么?为什么?
1 a=10 2 b=20 3 def test5(a,b): 4 a=3 5 b=5 6 print(a,b) 7 c = test5(b,a) 8 print(c)

浙公网安备 33010602011771号