• 名称空间与作用域


    一、名称空间namespacs:存放名字的地方,是对栈区的划分

    名称空间即存放名字与对象映射/绑定关系的地方。

    1.分为三类:内置名称空间、全局名称空间、局部名称空间

    1.1 内置名称空间

    (1)存放的名字:存放的python解释器内置的名字。

    >>> print

    <built-in function print>

    >>> input

    <built-in function input>

    (2)存活周期:python解释器启动则产生,python解释器关闭则销毁。

    1.2 全局名称空间

    (1)存放的名字:只要不是函数内定义、也不是内置的,剩下的都是全局名称空间的名字

    (2)存活周期:python文件执行则产生,python文件运行完毕后销毁。

    import sys #模块名sys

    x=1 #变量名x

    if x == 1:

        y=2 #变量名y

    def foo(x): #函数名foo

        y=1

        def bar():

            pass

    Class Bar: #类名Bar

        pass

    1.3 局部名称空间

    (1)存放的名字:在调用函数时,运行函数体代码过程中产生的函数内的名字

    (2)存活周期:在调用函数时存活,函数调用完毕后则销毁

     def func(a,b):

        pass

     func(10,1)

     func(11,12)

     1.4 名称空间的加载顺序

     内置名称空间>全局名称空间>局部名称空间

     1.5 销毁顺序

     局部名称空间>全局名空间>内置名称空间

     1.6 名字的查找优先级:当前所在的位置向上一层一层查找

    (1)如果当前在局部名称空间:

     局部名称空间—>全局名称空间->内置名称空间

    (2)如果当前在全局名称空间

     全局名称空间->内置名称空间

    二:作用域-》作用范围

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

    (1)全局存活

    (2)全局有效:被所有函数共享

    2、局部作用域: 局部名称空间的名字

    (1)临时存活

    (2)局部有效:函数内有效

    3、global的使用

    如果在局部名称空间想要修改全局名称空间的名字对应的值,针对不可变类型需要用global

    global x # 声明x这个名字是全局的名字,不要再造新的名字了

    x=222

    针对可变类型:不需使用global便可实现修改

    l=[111,222]

    def func():

        l.append(333)

    func()

    print(l)    # [111, 222, 333]

    4、nonlocal(了解): 修改函数外层函数包含的名字对应的值,针对不可变类型需要用nonlocal

     x=0

     def f1():

         x=11

         def f2():

             nonlocal x

             x=22

         f2()

         print('f1内的x:',x)

     f1()   #f1内的x: 22

    针对可变类型:不需使用nonlocal便可实现修改

     def f1():

         x=[]

         def f2():

            x.append(1111)

         f2()

         print('f1内的x:',x)

     f1()    # f1内的x: [1111]

  • 相关阅读:
    noi.ac 集合
    NOI2019 SX 模拟赛 no.5
    带花树草解
    UR#13 SRAND
    【51nod1847】 奇怪的数学题
    ●POJ 3237 Tree
    ●BZOJ 2049 [Sdoi2008]Cave洞穴勘测
    ●BZOJ 2002 [Hnoi2010]Bounce 弹飞绵羊
    ●POJ 2983 Is the Information Reliable?
    ●POJ 3378 Crazy Thairs
  • 原文地址:https://www.cnblogs.com/python-htl/p/12526757.html
Copyright © 2020-2023  润新知