• 函数调用与 名称空间


    名称空间的加载顺序: 1.启动解释器加载全局名称空间(内置函数等)   2.运行py文件运行全局名称空间(for if while) 3.执行函数运行局部名称空间

    1.名称空间(变量,函数,内置函数)

    """
    什么是名称空间?
        存放名字的空间
    
    如果你想访问一个变量值,必须先方向对应的名称空间,拿到名字和对应的内存地址的绑定关系
    
    名称空间的分类:
        1、内置名称空间:
            python提前给你的定义完的名字,就是存在内置名称空间  如:len max 等内置函数
        2、全局名称空间
            存放于文件级别的名字,就是全局名称空间
            if while for 内部定义的名字执行之后都存放于全局名称空间
        3、局部名称空间
            函数内部定义的所有名字都是存放与当前函数的内置名称空间
    
    生命周期:
        1、内置名称空间
            在python解释器启动的时候生效,关闭解释器的时候失效
        2、全局名称空间
            当你启动当前这个py文件的时候生效,当前页面代码执行结束之后失效
        3、局部名称空间
            当你调用当前函数时生效,函数体最后一行代码执行结束就失效
    名称空间的查找顺序:
    
    """

    2.查找顺序

    """
    名称空间的查找顺序:
        局部:局部 > 全局 > 内置
        全局:全局 > 内置  # 内置再找不到就报错
    # 函数内部使用的名字,在定义阶段已经规定死了,与你的调用位置无关
    """
    
    # x = 1
    #
    # def wrapper():  # 定义
    #     x = 2
    #     index()  # 定义里面包含调用
    # def index():  定义
    #     x = 3
    #     print(x)
    #
    # wrapper()      #调用:先定义 后调用
    
    
    
    ####
    # x = 1
    # def inner():
    #     x = 2
    #     def wrapper():
    #         print(x)
    #     wrapper()      #调用
    #
    # inner()
    
    ####
    def index():
    
        x = 2
        # print(x)
    
    print(x)
    
    x = 1
    
    def index(arg = x):
        print(x)
        print(arg)
    
    x = 2
    index()

    3.作用域

    """
    作用域的分类:
        1、全局作用域
            全局可以调用的名字就存在于全局作用域
    
            内置名称空间+全局名称空间
        2、局部作用域
            局部可以调用的名字就存放与局部作用域
            局部名称空间
    
    global:声明全局变量(***)
    nonlocal:在局部名称空间声明局部变量,在局部修改上层函数的变量(*)
    
    只有可变类型可以在局部修改外部变量的值 (*****)
    """
    
    # x = 1
    #
    # def index():   # 定义
    #     global x    # 声明为全局变量并修改值
    #     x = 2
    # index()        # 调用 :在定义阶段,函数只会被读,不会被执行,一旦被调用 函数体会被执行
    # print(x)
    
    ########  函数先定义 后执行,函数体内的执行语句不会被执行,只有被调用的时候才会执行
    # l1 = []
    # def index(a):
    #     l1.append(a)
    #     print(l1)
    # index(1)
    #
    # print(l1)
    
    ########  局部变量的修改无法影响只能影响到上一层
    def index():
        x = 1
        def index2():
            nonlocal x   
            x = 2
        index2()
        print(x)
    index()
    #  例题 :
    def f3():
        x = 4
        def f1():
            y = 2
            def f2():
                nonlocal x
                x = 3
            f2()
            print(x)
        f1()
        print(x)
    f3()           结果 33
  • 相关阅读:
    第14章 位图和位块传输_14.1-14.3 位图基础
    第13章 使用打印机_13.2 打印图形和文字
    第13章 使用打印机_13.1 打印基础
    第12章 剪贴板_12.3 实现一个剪贴板查看器
    第12章 剪贴板_12.2 剪贴板的高级用法
    第12章 剪贴板_12.1 剪贴板的简单用法
    第11章 对话框_11.3 通用对话框
    第11章 对话框_11.2 非模态对话框
    第11章 对话框_11.1 模态对话框
    第5章 作业和进程池(2)
  • 原文地址:https://www.cnblogs.com/bigbox/p/11837654.html
Copyright © 2020-2023  润新知