09 Day Python之函数进阶

函数进阶

1、命名空间

①内置命名空间:python编译器启动时就可以使用的名字存在内置命名空间中

②全局命名空间:我们写的代码但不是函数中的代码

③局部命名空间:函数

2、作用域

全局作用域:内置命名空间、全局命名空间

局部作用域:局部命名空间

3、global关键字

对于不可变数据类型,在局部可以查看全局作用域中的变量,但是不能修改,如果想在局部作用域中对全局作用域的不可变类型 
变量进行修改,需要在局部开始加上global声明

1 x = 1 # 全局作用域的不可变数据类型变量x
2 def func():
3     global x # 在局域作用域中对其进行声明
4     x = 2 # 声明后则可以在局域作用域中对其进行修改操作
5 func()
6 print(x) # 局部作用域将全局作用域的不可变数据类型变量修改后,在全局作用域中打印,其值被修改
View Code

4、locals()、globals()函数

①globals():输出全局作用域的所有变量

②locals():输出当前作用域的所有变量

 1 a = 1
 2 def func():
 3     a = 666
 4     print('函数内部的locals:'+str(locals()))
 5 func()
 6 
 7 print('函数外部的globals:'+str(globals()))
 8 print('函数外部的locals:'+str(locals()))
 9 
10 >>> 函数内部的locals:{'a': 666}
11 >>> 函数外部的globals:{'__doc__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000000653EF0>, '__name__': '__main__', '__builtins__': <module 'builtins' (built-in)>, '__cached__': None, '__spec__': None, '__author__': 'Elijah', '__file__': 'D:/python_fullstack_s9/day10/practice.py', '__date__': '2017/12/27 8:33', 'func': <function func at 0x000000000070E6A8>, 'a': 1, '__package__': None}
12 >>> 函数外部的locals:{'__doc__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000000653EF0>, '__name__': '__main__', '__builtins__': <module 'builtins' (built-in)>, '__cached__': None, '__spec__': None, '__author__': 'Elijah', '__file__': 'D:/python_fullstack_s9/day10/practice.py', '__date__': '2017/12/27 8:33', 'func': <function func at 0x000000000070E6A8>, 'a': 1, '__package__': None}
View Code

5、函数名的本质:函数名本质上就是函数的内存地址

①可以被引用

②可以被当作容器类型的元素

③可以当作函数的参数和返回值

函数名是第一类对象

    • 第一类对象(first-class object)指 
      1.可在运行期创建 
      2.可用作函数参数或返回值 
      3.可存入变量的实体。
posted @ 2020-04-05 09:43  kylindemi  阅读(136)  评论(0)    收藏  举报