001.python前言

本系列文章是我个人学习《python学习手册(第五版)》的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展。

非商业用途转载请注明作者和出处;商业用途请联系本人(gaoyang1019@hotmail.com)获取许可。

关于python优缺点的分析

  • python可读性高,移植性较好
  • 代码简洁,完成同样的问题相比java和C++,代码量是其的1/5~1/3
  • 效率相对C语言叫差,但也不是那么差
  • 开源,社区活跃度很高,官方和民间提供了很多的库可以直接使用

这里引申出一个问题,关于开源的优缺点。以下内容为个人理解,仅代表我的个人观点,不具备权威性

开源的优点

1)源代码开放,相对比较安全;

2)开源软件大部分可以免费使用,即使需要付费许可,其许可费用相对也比较低。

3)开源软件的社区一般比较活跃,软件更新迭代速度很快。

关于开源软件的缺点

1)开源软件一般由相应的社区维护,其迭代速度取决于社区的活跃度。而且有可能因为开发人员的兴趣转移或者其他因素导致软件停止维护,存在一定的风险

2)开源软件的使用门槛相对来说比较高,虽然节省了开发成本,但是对部署和维护人员来说,要求一定的技术能力。比如,如果使用商业软件,后期的支持等工作可以由软件提供商负责,而开源软件并不存在响应的责任部门,所以部署维护全要靠自己的技术人员完成。这也就是为啥虽然开源软件许可费用很低甚至免费,很多公司机构依旧会选用商业软件的原因。毕竟能用钱解决的问题,对于有钱人来说都不是问题。

3)开源软件缺乏主导的控制,开源社区是一个自由度相对较高的社区。缺乏绝对的主导。这就会因为开源社区过于活跃,导致版本分支的混乱。

python运行过程

python是个解释型语言。这句话说的对,但不完全对。

首先简单说明下解释型语言和编译型语言:

  • 「编译型语言:「源代码被」编译器」经过一连串的处理最终生成的是和处理器指令集强相关的,可以被处理器直接执行的二进制文件。

    • 典型的C语言和C++。以常用的GCC编译器为例,从代码编程可执行的二进制文件要经过预编译->编译->汇编->链接等多个步骤。
    • 优点:编译型语言从源码到可执行二进制文件时在运行前就已经完成的。所以在执行的时候不需要再次处理源码,效率较高
    • 缺点:同样的,因为源码在执行前已经被处理成为处理器强相关的二进制文件,所以移植性很差。
  • 「解释型语言:「源代码由」解释器」「运行时」逐句翻译成机器码。

    • java,python等语言都属于这一类。但是又不严格的属于这一类。因为现在所谓的解释型语言都有所谓的优化,实际解释器在翻译的并不是源码,而是经过预处理的“半成品”
    • 优点:由解释器执行翻译,平台不相关,移植性好。
    • 缺点:

      • 效率低
      • 因为平台和源码之间还有个解释器,所以在部署的时候,需要先安装相关的运行环境比如java的jre等。当然也可以打包成对应的二进制文件,像py2exe这样的工具,但是它也是将python解释器和源码(字节码)同时打包了而已。

「python的运行过程」

  • 源码(.py)先被解释器处理成字节码(.pyc)
  • 程序运行时,字节码(.pyc)被解释器解释成可执行的指令

关于程序执行这一块暂时不讲,在后续的“有生之年系列”可能会有相关文章讲述这一块。

这里简答说一下字节码.pyc文件的生成。首先,字节码是一种平台无关的,低级的表现形式,主要用来提高运行速度。

如果python解释器具有写入的权限,在python3.2之前,字节码文件会被保存在源码目录下的子目录__pycache__中,且解释器版本信息会保存在对应的.pyc文件内。在python3.2之后,字节码文件依旧会保存在该目录下,但是版本信息会保存在文件名中,如下图所示:


image-20201109233951859

如果python解释器不具备写入权限,同样会生成字节码文件,但是该文件会保存在内存中.

「何时重新编译」

如果源码没有修改的话,在再次执行该代码的时候,python解释器会直接解释对应的字节码文件而不需重新"编译"(注意,这个编译是打了引号的.)字节码.那么何时重新"编译"字节码呢?两种情况:

  • 「源文件改变:」 python解释器会检查源文件和字节码文件的最后修改的时间戳,如果时间不一致,则重新"编译"字节码
  • 「解释器版本改变:」 如果字节码文件所使用的的解释器版本和当前执行代码所使用的解释器版本不一致,则重新"编译"

python的解释器

python的解释器有很多实现,这里介绍一下比较出名的几个.了解一下就好,毕竟用的最多的还是标准的CPython.

  • 「CPython:」 由ANSI C语言实现,是标准的Python解释器.

    • 我们在python官网下载的python套件中使用的就是CPython
    • 运行速度最快,最完成,最新,最健全
  • 「Jython:」 这玩意儿的目的是将Python和Java集成,将Python源码翻译成Java的字节码以便于使其运行在JVM上.
  • 「IronPython:」 和Jython差不多,但是这家伙的目的是使python运行在.net框架之下.
  • 「Stackless:」 CPython针对并发的优化,引入了协程的概念
  • 「PyPy:」 采用JIT(just in time)技术,据说可以比python甚至C语言更快,在算法密集和计算密集的场景下性能更为突出.(这块不懂,不敢瞎白话)

本文使用 mdnice 排版

[python学习手册-笔记]001.python前言的更多相关文章

  1. [python学习手册-笔记]002.python核心数据类型

    python核心数据类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明 ...

  2. [python学习手册-笔记]003.数值类型

    003.数值类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明作者和出 ...

  3. [python学习手册-笔记]004.动态类型

    004.动态类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明作者和出 ...

  4. 15、python学习手册之:python语句、赋值、表达式和打印

    1.语句的另一个特殊规则是用一对括号把语句括起来就可以:括号().方括号[].字典的大括号{}.任何括在这些符号里的程序代码都可横跨好几行. 2.括号是可以包含一切的,因为任何表达式都可以包含在内,只 ...

  5. Python学习基础笔记(全)

    换博客了,还是csdn好一些. Python学习基础笔记 1.Python学习-linux下Python3的安装 2.Python学习-数据类型.运算符.条件语句 3.Python学习-循环语句 4. ...

  6. 转载-《Python学习手册》读书笔记

    转载-<Python学习手册>读书笔记 http://www.cnblogs.com/wuyuegb2312/archive/2013/02/26/2910908.html

  7. 自学笔记系列:《Python学习手册 第五版》 -写在开始之前

    今年双十一,在当当网上买了这本书,很厚很厚的一本书,大概有将近1700页左右,的确是一个“大工程”, 关于这本书的学习,我想采用一种博客的方式进行,既是写给自己,也想分享给每一个对Python学习感兴 ...

  8. 《Python学习手册》读书笔记

    之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读<Python学习手册(第三版)>.如果只是想快速入门,我 ...

  9. 《Python学习手册》读书笔记【转载】

    转载:http://www.cnblogs.com/wuyuegb2312/archive/2013/02/26/2910908.html 之前为了编写一个svm分词的程序而简单学了下Python,觉 ...

随机推荐

  1. 数字PLL,什么是数字PLL

    来源:http://www.elecfans.com/baike/bandaoti/bandaotiqijian/20100323203306.html 数字PLL,什么是数字PLL 数字PLL PL ...

  2. 【小白学PyTorch】21 Keras的API详解(上)卷积、激活、初始化、正则

    [新闻]:机器学习炼丹术的粉丝的人工智能交流群已经建立,目前有目标检测.医学图像.时间序列等多个目标为技术学习的分群和水群唠嗑答疑解惑的总群,欢迎大家加炼丹兄为好友,加入炼丹协会.微信:cyx6450 ...

  3. 超级简单的照片画廊MVC

    下载Gallery.zip - 23.5 MB 介绍 我想在我的个人网站上添加一个简单的图片库,但找不到任何合适的方法来从文件夹而不是数据库中挑选图片.也许我应该看得更仔细些!尽管如此,下面是我实现的 ...

  4. javascript 数据类型判断总结

    一 typeof 回顾:js有五种基本数据类型:值类型("number","string","boolean","undefine ...

  5. 2440启动流程 <转载>

    韦东山 博客园 首页 订阅 管理 2440启动过程分析   2440启动过程分析 2440启动过程算是一个难点,不太容易理解,而对于2440启动过程的理解,影响了后面裸机代码执行流程的分析,从而看出2 ...

  6. Rust之路(0)

    Rust--一个2012年出现,2015年推出1.0版本的"年轻"语言.在 2016 至 2018 年的 stack overflow 开发人员调查中,被评比为 "最受欢 ...

  7. day27 Pyhton 面向对象02 组合

    # 组合 # 什么是组合 : 一个类对象的属性是另外一个类的对象 class Person: def __init__(self,name,sex,hp,mp,ad): self.name = nam ...

  8. Jmeter设计压力测试场景

    1.哪些业务需要做压力测试? 比较常用的功能模块 单一业务场景或者多业务场景 项目需要做的业务场景 2.压力测试的并发数是多少? 有预期的数值?一次性达到?有上次性能测试的结果值? 无预期的数值?只有 ...

  9. [Leetcode题解]2. 两数相加-链表遍历和重构

    1. 审题leetcode 02 add-two-numbers​ 我们先看一下题目,如下  : 链表的从前往后为数字的低位到高位,模拟加法手算过程,从前往后遍历即可, 注意每个数字0-9,进位要处理 ...

  10. 探索ParNew和CMS垃圾回收器

    前言 上篇文章我们一起分析了JVM的垃圾回收机制,了解了新生代的内存模型,老年代的空间分配担保原则,并简单的介绍了几种垃圾回收器.详细内容小伙伴们可以去看一下我的上篇文章:秒懂JVM的垃圾回收机制. ...