zoukankan      html  css  js  c++  java
  • pyc文件

    1. python解释器执行流程

    # 总流程
    源代码——编译》字节码(pyc文件)——解释》机器码
    
    1.先进行编译,将源代码的编译结果(字节码)放在内存中的PyCodeObject对象中
    2.解释器将字节码转化成机器码
    3.程序执行结束,解释器则将内存中PyCodeObject写回到pyc文件中
    4.再次执行该程序时,查看pyc文件,如果pyc字节码文件存在,且源代码文件与字节码文件最后修改时间一致,直接转化为机器码
    5.源代码变化,则从第一步开始,没有变化则从第二步开始,按此循环
    

    2.生成pyc文件场景

    1. 为什么要生成pyc
    从刚才的执行流程中,pyc文件的存在可以省略编译的过程,提升执行效率
    
    2.重用性比较多的,python解释器将import进来的模块,默认产生pyc,这些模块复用性更强
    
    3. 实例
    # 文件one.py
    [root@localhost test]# cat one.py 
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    import datetime
    def get_now_time():
        print(datetime.datetime.now())
        return "当前时间:%s" % (datetime.datetime.now())
    
    # 文件two.py,two.py文件中使用one.py中的函数,通过import导入
    [root@localhost test]# cat two.py 
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    from one import get_now_time
    
    if __name__ == '__main__':
        res = get_now_time()
        print("获取结果--%s" % res)
    
    # 执行two.py 文件
    [root@localhost test]# ls
    one.py  two.py
    [root@localhost test]# python3 two.py 
    2019-03-16 18:08:38.119045
    获取结果--当前时间:2019-03-16 18:08:38.119163
    # 产生了pyc文件
    [root@localhost test]# ls -a
    .  ..  one.py  __pycache__  two.py
    [root@localhost test]# cd __pycache__/
    [root@localhost __pycache__]# ls
    one.cpython-37.pyc
    
    

    3.手动生成pyc文件

    1. python -m
    
    2. py_compile
    # 被编译的目标文件
    [root@localhost test]# cat three.py 
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    print("@@@@@@@@@@@@")
    
    # create_pyc.py
    [root@localhost test]# cat create_pyc.py 
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    import py_compile
    res=py_compile.compile("/qqc_ceshi/test/three.py")
    print(res,"$$$$$$$$$$")
    
    [root@localhost test]# python3 create_pyc.py 
    /qqc_ceshi/test/__pycache__/three.cpython-37.pyc $$$$$$$$$$
    [root@localhost __pycache__]# ls -a
    .  ..  one.cpython-37.pyc  three.cpython-37.pyc
    
    # 执行pyc文件
    [root@localhost __pycache__]# python3 three.cpython-37.pyc 
    @@@@@@@@@@@@
    
    
    3. import py_compileall
    
  • 相关阅读:
    Cocos Creator Editor 第一个编辑器扩展(扩展菜单)
    Rider 设置
    unity 使用GameObject.SetActive(true)激活对象时,会在SetActive内部调用Awake和OnEnable函数
    unity/C# 结构体属性使用set和get访问器应注意的问题
    unity 自定义AssetImporter导入指定资源
    Duilib部分源码解析
    TreeView树形控件的使用
    JQuery 文档资源收集
    排序和搜索(一)插入排序系列
    字符相关类型和编码概念
  • 原文地址:https://www.cnblogs.com/quqinchao/p/bian_liang.html
Copyright © 2011-2022 走看看