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
    
  • 相关阅读:
    ES6---async, await, promise 综合例子
    ES6---Promise应用: async, await
    ES6---Promise 4: 更多案例
    掌握这两个技术点,你可以玩转AppCan前端开发
    AppCan4.0:开发者要做有价值的APP
    以“掌上东航”为例,论混合开发在企业级项目中的实践
    基于AppCan MAS系统,如何轻松实现移动应用数据服务?
    正益移动王国春:布局在是与不是之间
    【TOP10 APP】这些应用成了AppCan千人大会的焦点
    我爱我家:我为什么选择AppCan?
  • 原文地址:https://www.cnblogs.com/quqinchao/p/bian_liang.html
Copyright © 2011-2022 走看看