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)
example

三、函数名的本质

   函数名本质就是内存地址。

  故可以:赋值、作为容器类型的元素、作为函数的返回值、作为函数的参数

 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()
example

 

四、函数的闭包

  闭包:本质是嵌套函数,是内部函数调用外部函数的变量

1 def outer():
2     a = 1
3     def inner():
4         print(a)
5     inner()
6 outer()
example

五、作业

  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)))
answer

  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)

 

posted @ 2018-10-09 13:58  wangspy  阅读(62)  评论(0)    收藏  举报