• python在导入模块时,即import时究竟有哪些动作?


    python在导入模块时,即import时究竟有哪些动作?在python中,导入并非只是把一个文本文件插入到另一个文件。导入其实是运行时的运算,程序第一次导入指定文件时,会执行以下三个步骤:
    1、找到模块文件
    2、编译成位码(即pyc文件)
    3、执行模块的代码来创建其所定义的变量(你没看错,导入时代码是会执行的)
    需要明确的事,模块导入只有在第一次导入时才会进行。此后,导入相同模块时,会跳过这三个步骤,而只提取内存中已经加载的模块对象。从技术上,Python把载入的模块储存在一个名为sys.modules的表中,并在第一次导入操作时,检查该表。如果不存在便会启动这三个过程。
    1、搜索
    搜索分为4个步骤
    (1)程序的主目录
    通常是包含程序的顶层脚本文件的目录。

    通常情况下,使用如下可以获取的主程序目录

    1. import os
    2. os.getcwd()
    3. 'C:\\Users\\AppData\\Local\\Programs\\Python\\Python38'

    (2)标准库目录
    即python的安装目录,sys.path可以获取
    (3)任何.pth文件中定义的目录
    把文件路径在.pth文件中一行一行的列出。例如:你可以定义一个名为myconfig.pth文件放在Python安装目录的顶层(C:/python30或者其子目录lib/sitepackages中)
    注意:以上4个方法是有先后顺序的,假如上述4个目录或文件中定义了一个相同的文件名,内容却不相同,以最先找到的为标准
    2、编译Python会检查文件的时间戳,如果发现字节码文件比源代码文件旧,就会在程序运行中重新生成字节码,反之,跳过该步骤。此外,如果发现仅有字节码没有源代码,则直接加载字节码。

    3、运行
    最后操作是执行模块的字节码。文件中的所有语句均会执行,从头到尾,此步骤中任何对变量名的赋值运算,都会产生所得到的模块文件的属性。

  • 相关阅读:
    SpringBoot集成自然语言处理hanlp工具包
    JavaScript中的空数组和空对象布尔值是true还是false?
    c# ? 和 ??
    济南申报高新技术企业不符合的条件
    mysql 学习笔记-窗口函数之开窗聚合函数
    C++之I/0流操作(标准流、文件流、二进制操作等)
    Leetcode394 字符串解码
    文件系统里面没有 /dev/input/mice 文件的解决办法
    程序员是怎么分享微信二维码的
    Andorid源码编译需要掌握的shell语法(三)
  • 原文地址:https://blog.csdn.net/onemorepoint/article/details/126354571