网站首页 > 技术文章 正文
小朋友们好,大朋友们好!
我是猫妹,一名爱上Python编程的小学生。
和猫妹学Python,一起趣味学编程。
py文件和pyc文件
我们都知道py后缀是Python源码文件,偶尔还会看到pyc后缀文件。
pyc后缀文件是做什么用的呢?
咱们今天学习下,pyc文件的基础知识。
pyc是官方开发的解释器编译过生成的文件,它是二进制文件。
pyc就是python compiled的缩写,它会保存在一个名叫__pycache__文件夹下。
文件命名有规律,比如module.cpython-38.pyc。
这里的cpython-38,表示c编写的Python解释器,Python解释器版本是38。
pyc文件的作用是加速程序的执行,import模块时,解释器会先编译该模块,生成pyc文件。
对模块源文件进行了修改,pyc文件会更新。
模块的源码(py)转换为字节码文件(pyc)。
Python在解释源程序时会分成两个步骤:
- 处理源代码,编译生成一个二进制字节码文件
- 对字节码进行处理,才会生成CPU能够识别的机器码。
有了模块的字节码文件后,下次程序运行时,如果在上次保存字节码之没有修改过源码,Python将会加载pyc文件并跳过编译这个步骤。
举个例子
pyc文件的生成
在磁盘上建立一个文件夹pyc,在该文件夹下创建两个Python文件,一个模块module.py,一个是test.py。
运行test.py会生成文件夹__pycache__,内部有文件module.cpython-38.pyc。
py源码文件如果没有加入代码混淆的话,那么生成的pyc文件,是可以反编译出源码的。
我们随便选一个在线的工具,类似工具有很多,也可以本地编码实现。
如图:
pyc文件的用途
既然pyc是py文件编译生成的,那么pyc文件是否可以替代Python呢?
这样不就可以隐藏源码了吗?
可以的,把test.py放入__pycache__,pyc文件改名为module.pyc。
非模块文件也可以生成pyc文件
我们删除其他文件,新建hello.py。
正常运行python文件,不加参数:python hello.py。
如果想生成pyc文件呢?
需要加个参数:python -m py_compile hello.py
生成的hello.cpython-38.pyc可以用Python运行
好了,我们今天就学到这里吧!
如果遇到什么问题,咱们多多交流,共同解决。
我是猫妹,咱们下次见!
猜你喜欢
- 2024-10-10 超详细的Python之模块知识点,这些知识点你都学会了吗?
- 2024-10-10 Python实用案例编程入门:第八章 如何自动连接WIFI
- 2024-10-10 Python 幕后:Python导入import的工作原理
- 2024-10-10 Python3基础之构建setup.py(python构建模型)
- 2024-10-10 docker进击之Dockerfile最佳实践(docker基础实战教程三:dockerfile)
- 2024-10-10 Python超详细的字符串用法大全(python字符串操作大全)
- 2024-10-10 Python 3.8 新特性全面解读(python3.10新特性)
- 2024-10-10 使用 Scrapy 轻松抓取网页(用python抓取网页数据的代码)
- 2024-10-10 如何把Python应用构建为Docker容器
- 2024-10-10 使用哪些工具,可以提升 Python 项目质量?
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)