python中的pyc文件是什么
作者:菜鸟小超 发布时间:2021-05-12 16:18:57
基本说明
pyc
文件是 Python 编译过的字节码文件。当你运行一个 Python 程序时,Python 解释器首先将源代码(通常是 .py
文件)编译成字节码。
这个字节码是一种低级的、与平台无关的代码,它可以被 Python 虚拟机(Python Virtual Machine,PVM
)直接执行。将源代码编译成字节码的过程可以提高程序的运行速度。
Python 通常会在编译过程中生成一个 .pyc
文件,并将其存储在 __pycache__
目录下。这个文件包含了源代码对应的字节码。当 Python 再次运行相同的程序时,它会检查是否存在对应的 .pyc
文件,如果存在并且比源文件更新,那么 Python 就直接运行字节码,而不是重新编译源代码,从而加快程序启动速度。
但是,如果源代码文件(.py
文件)被修改,或者 Python 解释器版本发生变化,那么 Python 就会重新编译源代码,生成一个新的 .pyc
文件来替换旧的字节码文件。
注意一下
在Python中,只有被import语句导入的模块(包括标准库和第三方库)和直接执行的Python脚本文件(使用Python解释器直接运行的.py文件)才会生成PYC文件。
当一个模块被导入时,Python会在sys.path路径下查找该模块的源代码文件,并编译成PYC文件,保存在与源代码文件相同的目录下。如果在导入模块时遇到了相同的PYC文件,则会直接加载这个PYC文件,避免重复编译源代码。
对于直接执行的Python脚本文件,如果它的文件名是"example.py"
,那么Python解释器会在当前工作目录下查找该文件,将其编译成PYC
文件"example.pyc"
并保存在同一目录下。如果在执行脚本文件时发生错误,则不会生成PYC
文件。
假设我们有一个Python脚本文件名为"example.py"
,包含如下代码:
def add_numbers(a, b):
return a + b
result = add_numbers(1, 2)
print(result)
我们可以在命令行中直接运行这个脚本文件,命令为:
python example.py
这将会执行该脚本文件中的代码,并生成PYC
文件"example.pyc"
,保存在同一目录下。下次再次运行这个脚本文件时,Python解释器会检查是否存在缓存的PYC
文件,如果存在,则直接加载缓存的PYC
文件并执行其中的字节码,这样就可以提高代码的执行速度。
需要注意的是,如果我们修改了"example.py"
文件中的代码,并再次运行它,Python会重新编译代码并生成新的PYC
文件,以确保缓存的字节码与最新的源代码一致。
除了使用Python解释器直接运行.py
文件生成PYC
文件外,还有其他方式可以运行Python代码,但是它们不会生成PYC
文件。
一种方式是使用Python的交互式环境(也称为REPL
环境),例如在命令行中输入"python"命令可以进入Python交互式环境,然后可以直接在命令行中输入Python代码并执行,但是不会生成PYC
文件。
另一种方式是通过Python解释器的-e选项,可以在命令行中直接执行一行Python代码,例如:
python -e "print('Hello, world!')"
这种方式也不会生成PYC
文件。
需要注意的是,即使不生成PYC
文件,Python仍然会在内存中编译和执行代码,只是没有将字节码保存到硬盘上,所以每次运行代码都需要重新编译。
来源:https://blog.csdn.net/weixin_41777118/article/details/130233279
猜你喜欢
- 我就废话不多说了,直接上代码吧!第一种def test1(): l = [] for i in range(1000
- 本文实例讲述了Python设计模式之抽象工厂模式原理与用法。分享给大家供大家参考,具体如下:抽象工厂模式(Abstract Factory
- pandas每次多Sheet写入文件,只能一次性存入,不然每次会重写文件,最后只保留最后一次的写入。# !usr/bin env pytho
- 一、Scrapy是什么Scrapy 是一个基于 Twisted 的异步处理框架,是纯 Python 实现的爬虫框架,其架构清晰,模块之间的耦
- php 如何获取请求的xml数据,对方通过http协议post提交过来xml数据,php如何获取到这些数据呢?<?php $xml_d
- 导语大家好,我是栗子同学!今天给大家分享一个好玩的东西让时光倒流——当当当,其实就是让视频倒放而已正
- Python下实现定时任务的方式有很多种方式。下面介绍几种循环sleep:这是一种最简单的方式,在循环里放入要执行的任务,然后sleep一段
- 本文实例讲述了python开发之基于thread线程搜索本地文件的方法。分享给大家供大家参考,具体如下:先来看看运行效果图:利用多个线程处理
- (1)使用python生成pdf文档需要的最基本的包是pdfgen。它属于reportlab模块,而reportlab模块并没有默认集成到p
- 今天我要为大家介绍的是XPath,XPath是导航和查询XML文档的语言。我们从一个函数开始。UpdateXML()函数我们已经花了很多时间
- 1 蚂蚁森林简介蚂蚁森林是一项旨在带动公众低碳减排的公益项目,每个人的低碳行为在蚂蚁森林里可计为"绿色能量"。"
- 问题是:输入一个数字,按照指定要求逆序输出该数字,很简单,下面是实现:#!usr/bin/env python#encoding:utf-8
- 本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052一、Mnist 分
- np.where共两种用法:第一种np.where(condition, x, y),即condition为条件,当满足条件输出为x,不满足
- 一、需求分析我们首先有一个成绩表单,但是学生的成绩是按照学号进行排序的,现在,我们希望清晰明了的知道每一个学生的名次,并且需要将学生按照成绩
- 组建一个关于书籍、作者、出版社的例子:from django.db import modelsclass Publisher(models.
- 1.主要用到 QFileDialog 方法打开本地文件2.界面打开前:打开后:3. 代码import sysfrom PyQt5 impor
- 在进行网页抓取的时候,分析定位html节点是获取抓取信息的关键,目前我用的是lxml模块(用来分析XML文档结构的,当然也能分析html结构
- MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列
- 用法本脚本用于批量扫描端口 1.在同目录下创建输入文件,属性inputFile为输入文件名2.属性th为线程数3.属性port为探测的目标端