今天编写程序时,发现了一个有趣的现象。当执行import语句时,运行以后,将会脚本目录下生成一个__pycache__文件。于是做了如下总结解释:

一. python基本运行机制

Python程序运行时不需要编译成二进制代码,而直接从源码运行程序,简单来说是,Python解释器将源码转换为字节码,然后再由解释器来执行这些字节码。

解释器的具体工作:

1 完成模块的加载和链接;

2 将源代码编译为PyCodeObject对象(即字节码),写入内存中,供CPU读取;

3 从内存中读取并执行,结束后将PyCodeObject写回硬盘当中,也就是复制到.pyc或.pyo文件中,以保存当前目录下所有脚本的字节码文件;

* 之后若再次执行该脚本,它先检查【本地是否有上述字节码文件】和【该字节码文件的修改时间是否与其脚本一致】。是就直接执行,否则重复上述步骤。

二. 为何会出现该文件

python解释器会将 *.py 脚本文件进行编译,并将编译结果保存到__pycache__目录中。

下次再执行工程时,若解释器发现这个 *.py 脚本没有修改过,就会跳过编译这一步,直接运行以前生成的保存在 __pycache__文件夹里的 *.pyc 文件。

这样工程较大时就可以大大缩短项目运行前的准备时间;如果你只需执行一个小工程,没关系 忽略这个文件夹就行。

三. 如何使该文件不出现

1. 单次关闭: 运行脚本时添加 -B 参数即可

2. 永久关闭: 设置环境变量 PYTHONDONTWRITEBYTECODE=1 即可

四. 解释下该文件的内容

该文件里有大小随时变化的类似格式random_walk.cpython-37.pyc文件,点号中的第一位代表被inport进来的模板。cpython-37cpython代表的是c语言实现的Python解释器,-37代表的是版本为3.7版。

五. 模块调用

Python中导入模块时,实际上会把被导入的模块执行一遍,如下: 
先看被调用的模块test.py

def haha():print("哈哈") haha()

再看主程序main.py

import testprint("一条鱼")

执行结果是:

哈哈
一条鱼

那怎么才能只是单纯调用而不执行被调用模块的代码呢?要想被调用模块代码不被执行,前提得知道变量__name__是什么意思,简单来说就是,如果不涉及模块导入的话,__name__的值就是” __main__“,如果当此模块被导入引用的话,那么这个模块内的__name__值就是文件的名字(不带.py),如下test_1.py

def haha():print("哈哈") haha() print(__name__)

test_1.py执行结果为:

哈哈
__main__

如果test_1被导入引用的话,如test_2

import test_1print("一条鱼")

test_2x运行结果为:

哈哈
test_1
一条鱼

上边所说要是弄懂的话,那我们在被调用的模块中,可执行的代码前加上这么一句判断,if __name__ == '__main__':,被调用的模块的代码就不会被执行了!或者再启动的时候添加选项参数。这个文件时可以删除的,不过删除意义不大。反而存在的话,加载会更快。

note: pyo和.pyc文件的执行速度不会比.py文件快,快的地方在于模块加载的速度

考文献:

https://blog.csdn.net/yitiaodashu/article/details/79023987

https://www.cnblogs.com/Ralph-Wang/archive/2013/11/23/3439080.html

https://jingyan.baidu.com/article/c14654134a7bdd0bfcfc4cea.html

转载于:https://www.cnblogs.com/Hermioner/p/9448627.html

python项目---数据可视化(02)相关推荐

  1. python代码示例图形-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  2. python画图代码大全-纯干货:手把手教你用Python做数据可视化(附代码)

    原标题:纯干货:手把手教你用Python做数据可视化(附代码) 导读:制作提供信息的可视化(有时称为绘图)是数据分析中的最重要任务之一.可视化可能是探索过程的一部分,例如,帮助识别异常值或所需的数据转 ...

  3. python处理数据可视化_数据整理101:使用Python提取,处理和可视化NBA数据

    python处理数据可视化 由Viraj Parekh | 2017年4月6日 (by Viraj Parekh | April 6, 2017) This is a basic tutorial u ...

  4. 【Python】数据可视化教程来了!

    来自:Datawhale????数据可视化小组 开源初衷 Matplotlib可以说是python数据可视化最重要且常见的工具之一,几乎每个和数据打交道的人都不可避免,还有大量可视化工具是基于它的二次 ...

  5. 『数据可视化』基于Python的数据可视化工具

    刘宇宙,现在一家创业型公司做技术总负责,做爬虫和数据处理相关工作,曾从事过卡系统研发.金融云计算服务系统研发,物联网方向大数据研发,著书一本,<Python3.5从零开始学> 如何做Pyt ...

  6. python实现数据可视化_使用Matplotib python实现数据可视化

    python实现数据可视化 I Feel: 我觉得: In today's digital world data has become as important as air. Machines &a ...

  7. python气象数据可视化学习记录1——基于ERA5数据画风场和海平面气压填色叠加图

    python气象数据可视化学习记录1--基于ERA5数据画风场和海平面气压填色叠加图 1. 写在前面 2. 图片效果 3. 逐步代码解析 3.1导入库 3.2 读取NC格式数据 3.3 对数据进行加工 ...

  8. Python Matplotlib数据可视化绘图之(六)————图片大小、颜色、标题、纵横坐标、画布和绘图区域背景颜色、Legend(图例)等的参数设置详解

    文章目录 前言 一.图片大小的设定和调节 1. 三种调整matplotlib图片大小的方法 1.1 plt.figure(figsize=(n, n)) 1.1.1 代码如下: 1.1.2 输出结果如 ...

  9. 视频教程-Python大数据可视化-Python

    Python大数据可视化 7年软件开发架构经验,12年IT培训经验,曾就职于拜特科技,金蝶软件,软酷网络等多家互联网公司.擅长Java EE,前端,iOS及大数据等技术方向的开发及教学.策划并撰稿大数 ...

  10. python与excel做数据可视化-用Python进行数据可视化的10种方法

    原标题:用Python进行数据可视化的10种方法 2015-11-19 关于转载授权 大数据文摘作品,欢迎个人转发朋友圈,自媒体.媒体.机构转载务必申请授权,后台留言"机构名称+转载&quo ...

最新文章

  1. C++ 虚函数和纯虚函数的用法
  2. 是时候不把智能手机叫做电话了:移动AI时代来临!
  3. 用移位寄存器实现边沿检测(功能仿真及ISE综合)
  4. Pandas与openpyxl库的 完美 融合!
  5. POJ 2135 最小费用最大流
  6. SpringCloud 入门教程(六): 用声明式REST客户端Feign调用远端HTTP服务
  7. Python面试题之下面代码会输出什么
  8. Android应用开发
  9. Android Jetpack组件之App Startup,源码+原理+手写框架
  10. Eclipse阿里巴巴Java开发规范插件安装
  11. Java 解析Tiff深入研究
  12. 《葬花吟》笛箫简谱-红楼梦主题曲
  13. Bean无法注入,‘sqlSessionFactory‘ threw exception,‘dataSource‘ threw exception大坑
  14. 小米路由器3c 虚拟服务器,小米路由器3C上不了网怎么办?
  15. 你也可以找到好工作(三)大结局
  16. 视觉检测零件同轴度 测试零件同轴度,检测是否同心圆
  17. 折腾黑群晖之域名直接访问群晖
  18. Mysql 利用存储过程 实现单据号码(单号)生成器(万能版)
  19. 应该如何进行程序化交易系统的检验?
  20. 计算机谱写的音乐,用WPSOffice谱写音乐简谱

热门文章

  1. 【渝粤教育】国家开放大学2018年春季 0557-21T广告设计 参考试题
  2. DataSet本地化数据的二表链接操作
  3. ubuntu16.04下ROS操作系统学习笔记(八)机器人SLAM与 Gmapping-Hector_slam-Cartographer--ORB_SLAM
  4. AtCoder Beginner Contest 137 解题报告(A ~ E)
  5. python之路 -- 并发编程之进程
  6. 1章 SpringBoot介绍
  7. eclipse安装lua
  8. 如何才能让项目团队高效稳定?
  9. AngularJs + angular-ui-router + bootstrap 实现blog基础导航功能
  10. [No000057]一个人默默背单词,小心被传染哦