python做用域

做用域

  1. 从空间角度研究函数python

    全局名称空间: py文件运行时开辟的,存放的是执行的py文件(除去函数内部)的全部的变量与值(地址)的对应关系,整个py文件结束以后,才会消失。函数

    临时(局部)名称空间: 函数执行时,在内存中临时开辟的一个空间,存放的函数中的变量与值的对应关系,随着函数的结束而消失。code

    内置名称空间:input,print,内置函数等。内存

  2. 取值顺序加载顺序作用域

    加载顺序:上面这三个空间,谁先加载到内存。input

    内置名称空间 ----》 全局名称空间 ----》 (函数执行时)临时名称空间io

    取值顺序:(就近原则)class

  3. 做用域变量

    全局做用域:全局名称空间,内置名称空间。文件

    局部做用域:局部名称空间。

关键字:global,nonlocal

# count = 0
#
# def func():
#     count += 1
# func()
#报错
# UnboundLocalError: local variable 'count' referenced before assignment
# 解释器认为:若是你在局部做用域对一个变量进行修改了,
# 你在局部做用域已经定义好这个变量了。

global

  1. 能够在局部做用域声明一个全局变量。

    # 这是剪切
    # def func():
    #    在全局定义一个变量name
    #     global name
    #     name = 1
    #
    #     print(globals())
    #     # print(locals())
    #     name += 1
    #     print(globals())
    #
    #
    # func()
    # # print(name)
    # print(globals())
  2. 能够修改全局变量。

    # count = 0
    #
    # def func():
    #     global count
    #     count += 1
    #
    # print(count)
    # func()
    # print(count)

nonlocal

  1. 不能操做全局变量。
  2. 能够对父级做用域的变量进行修改,而且在当前做用域建立(复制)一份此变量。
# 这是复制
# def func():
#     count = 0
#     def inner():
#         nonlocal count
#         count += 1
#         print(count)
#         print(locals())
#     inner()
#     print(locals())
# func()
# UnboundLocalError: local variable 'count' referenced before assignment
# 解释器认为:若是你在局部做用域对一个变量进行修改了,
# 你在局部做用域已经定义好这个变量了。
相关文章
相关标签/搜索