zoukankan      html  css  js  c++  java
  • 函数进阶

    名称空间

    python解析器执行时,每当遇到一个变量的时候,就把变量名和值之间对应的关系记录在内存空间中,这个空间叫全局命名空间

    如果遇到函数,只把函数名读入内存,当执行函数时,解析器会在在内存中创建一个临时king见,然后执行函数内部程序,

    函数结束时,临时空间消失,开辟的临时的空间叫做局部命名空间

    命名空间分为三种:

    ①全局命名空间

    ②局部命名空间

    ③内置命名空间

    加载顺序:内置、全局、局部

    取值顺序:局部、全局、内置

    作用域:

    全局作用域:包含内置名称空间、全局名称空间,在任意位置都能被引用,作用于全局

    局部作用域:只有函数内部可以调用

    globals和locals方法:

    name = 'wusir'
    def func():
        name = 'alex'
        print(globals())
        print(locals())
    func()
    #{'__name__': '__main__', '__doc__': None,.................'                      全局
    #{'name': 'alex'}                                                                 局部 

    函数嵌套练习:

    print(111)
    def fun2():
        print(222)
        def fun3():
            print(666)
        print(444)
        fun3()
        print(888)
    print(333)
    fun2()
    print(555)
    
    输出:1 3 2 4 6 8 5

    global关键字,nonlocal关键字:

    global()声明一个全局变量,在函数中声明,全局都可以使用(限于数字和字符串)

    a = 2
    def func():
        global a
        a = 3
    func()
    print(a) #在函数内部声明的a 作用于全局,覆盖函数之前的值,如果在函数下面声明 a = 5, 那么输出5 #输出:3

       如果为可变数据类型,则不需要加global

    l1 = [1,2,3]
    def func():
        l1.append(444)
    func()
    print(l1)
    #输出:[1, 2, 3, 444]

    nonlocal:不能修改全局变量

                     在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变

    a = 1
    def func():
        nonlocal a
        a = 2
        print(a)
    func()
    #报错,因为nonlocal只能在函数中修改他的父级,由于他的父级是全局,所以报错
    def func():
        name = 'A'               
        def inner():
            nonlocal name
            name = 'B'
            print(name)
        print(name)
        inner()
        print(name)           #由于此层级的name已经被 nonlocal 改变了值,所以输出B
    func()
    #输出:     A  
               B
               B
  • 相关阅读:
    codevs 3049 舞蹈家怀特先生
    洛谷P2530 [SHOI2001]化工厂装箱员
    洛谷P2736 “破锣摇滚”乐队 Raucous Rockers
    Phalanx
    Treats for the Cows
    Very Simple Problem
    Alice and Bob
    FatMouse and Cheese
    Tickets
    Piggy-Bank
  • 原文地址:https://www.cnblogs.com/pygg/p/8400263.html
Copyright © 2011-2022 走看看