码迷,mamicode.com
首页 > 其他好文 > 详细

名称空间

时间:2019-02-16 15:17:43      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:div   source   顺序   lis   har   rtl   list   ann   nbsp   

名称空间:
  内置 全局 局部

  内置命名空间 存放python解释器为我们提供的名字list str tuple之类的
  全局命名空间 直接在py文件中,函数外部声明的变量都是属于命名空间
  局部命名空间 在函数中声明的变量

取值顺序:
1.局部命名空间
2.全局命名空间
3.内置命名空间

技术图片

 


加载顺序:
1.内置空间
2.全局空间
3.局部空间
作用域:就是作用的范围,按照生效范围来分为全局作用域和局部作用域
全局作用域:包含命名空间和全局命名空间 在整个文件的任何位置都可以使用(遵循从上到下逐步执行)
局部作用域:在函数内部可以使用
globals() 查看全局变量
locals() 查看局部变量
a = 10
def func():
    a = 40
    b = 20
    def abc():
        print("哈哈")
        print(a, b)     # 这里使用的是局部作用域
        print(globals())    # 打印全局作用域中的内容
        print(locals())     # 打印局部作用域中的内容
    abc()
func()
结果:

哈哈
40 20
{‘__name__‘: ‘__main__‘, ‘__doc__‘: None, ‘__package__‘: None, ‘__loader__‘: <_frozen_importlib_external.SourceFileLoader object at 0x00000000006B5A20>, ‘__spec__‘: None, ‘__annotations__‘: {}, ‘__builtins__‘: <module ‘builtins‘ (built-in)>, ‘__file__‘: ‘C:/Users/Administrator/PycharmProjects/untitled/函数复习.py‘, ‘__cached__‘: None, ‘a‘: 10, ‘func‘: <function func at 0x00000000003B1E18>}
{‘b‘: 20, ‘a‘: 40

  

 

修改全局变量:

a = 10
def func():
    def abc():
        global a #声明修改全局变量a
        a = 22  #对a进行修改
        print(a)
    abc()
func()
print(a)
结果:
22
22

global修改全局变量 但是只能在局部修改 在全局会报错

a = 10
def func():
    a = 22
    def abc():
        nonlocal a  #声明父类离得最近的非全局变量a
        a =66    #对a进行修改
        print(a)
    abc()
    print(a)
func()
print(a)
结果:
66
66
10

nolocal修改父类离得最近的非全局的变量



名称空间

标签:div   source   顺序   lis   har   rtl   list   ann   nbsp   

原文地址:https://www.cnblogs.com/shicongcong0910/p/10387747.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!