Python由荷兰人吉多·范罗苏姆(Guido van Rossum)于1989年圣诞节期间,在阿姆斯特丹,为了打发圣诞节的无聊时间,决心开发一门解释型程序语言。Python语言基于ABC教学语言开发的。1991年第一个Python解释器公开版发布,它是用C语言编写实现的,并能够调用C语言的库文件。Python一诞生就已经具有了类、函数和异常处理等内容,包含字典、列表等核心数据结构,以及模块为基础的扩展系统。
2000年Python 2.0 发布,Python 2.0 的最后一个版本是2.7,Python 2.7的支持时间到2020年就已经结束了,目前主流Python开发使用的版本是 Python 3。需要注意的是,Python 3 与 python 2是不兼容的。作为初学者,学习Python应该从Python 3 开始。
2018年12月,Python发布了3.0版本,Python3.0是一次重大升级,为了避免引入历史包袱,Python3.0没有考虑与Python2.x的兼容性。Python3.x版本相比Python2.x版本更简介、更方便。现在,绝大部分开发者已经从Python 2.x转移到Python 3.x。
目前最新版本的Python3大版本是Python3.10(2021.10月发布的),小版本是3.10.4(2022.3月发布)。
2009年6月,Python发布了 3.1 版本。
2011年2月,python发布了 3.2 版本。
2012年9月,Python发布了 3.3 版本。
2014年3月,Python发布了 3.4 版本。
2015年9月,Python发布了 3.5 版本。
2016年12月,Python发布了 3.6 版本。
......
2021年10月,Python发布了 3.10 版本。
Python语言有它的设计理念和哲学,称为 “Python之禅”。Python之禅是Python的灵魂,理解Python之禅能帮助开发人员编写出优秀的Python程序。在python的交互式运行工具IDLE(也称为Python Shell)中输入:import this 命令,显示的内容就是Python之禅。如下所示:
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
0. The Zen of Python, by Tim Peters
Python之禅 by Tim Peters。
1. Beautiful is better than ugly.
优美胜于丑陋。(Python 以编写优美的代码为目标)
2. Explicit is better than implicit.
明了胜于晦涩。(优美的代码应当是明了的,命名规范,风格相似)
3. Simple is better than complex.
简洁胜于复杂。(优美的代码应当是简洁的,不要有复杂的内部实现)
4. Complex is better than complicated.
复杂胜于凌乱。(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
5. Flat is better than nested.
扁平胜于嵌套。(优美的代码应当是扁平的,不能有太多的嵌套)
6. Sparse is better than dense.
宽松胜于紧凑。(优美的代码有适当的间隔,不要奢望一行代码解决问题)
7. Readability counts.
可读性很重要。(优美的代码是具有很好的可读性的)
8. Special cases aren't special enough to break the rules.
9. Although practicality beats purity.
即便是特例,也不可违背这些规则。(这些规则至高无上)
10. Errors should never pass silently.
11. Unless explicitly silenced.
不要捕获所有错误,除非你确定需要这样做。(精准地捕获异常,不写 except:pass 风格的代码)
12. In the face of ambiguity, refuse the temptation to guess.
13. There should be one-- and preferably only one --obvious way to do it.
14. Although that way may not be obvious at first unless you're Dutch.
如果存在多种可能,不要尝试去猜测。而是应该尽量找一种,最好是唯一一种明显的解决方案。(通常只有唯一一种是最佳的解决方案)
虽然这并不容易,因为你不是Python之父(这里的 Dutch 是指 Python之父 Guido)
15. Now is better than never.
16. Although never is often better than *right* now.
做比不做要好,但不假思索就动手还不如不做。(动手写代码前要先仔细思量)
17. If the implementation is hard to explain, it's a bad idea.
18. If the implementation is easy to explain, it may be a good idea.
如果你无法向别人解释清楚你的方案(言外之意是你的方案很复杂难懂),那肯定不是一个好方案,反之亦然。(好方案的评判标准)
19. Namespaces are one honking great idea -- let's do more of those!
命名空间非常有用,应当多加利用。(建议多使用命名空间)
Python是一种面向对象、解释型、弱类型的脚本语言,也是一种功能强大而完善的通用型语言。Python代码简单,上手非常容易,代码量少。
Python语言能够流行起来,并长久不衰,得益于Python语言有很多关键的优秀特点。这些特点如下:
1)简单易学
Python设计目标之一就是能够方便学习,使用简单。它使你能够专注于解决问题而不是过于关注语言本身。
2)面向对象
Python支持面向对象的编程。与其他主要的语言如C++和Java相比,Python以一种非常强大又简单的方式实现面向对象编程。
3)解释型编程语言
Python程序是解释执行的,即Python程序在执行前不需要先将源程序编译成二进制的机器码,而是可以直接从源代码运行程序。在计算机内部,Python解释器把源代码转换成中间字节码形式,然后在再它解释为计算机能够识别的机器语言并执行。
4)免费开源
Python是免费开发源码的编程语言。简单地说,你可以自由地阅读、转发它的源代码,或修改它的源代码,或把它的一部分源代码用于新的自由软件当中。
5)可移植性
Python解释器已经被移植到许多平台上,Python程序无须修改任何代码就可以在多个平台上运行。
6)胶水语言
Python被称为胶水语言,所谓胶水语言是指用来连接其他语言编写的软件组件或模块。Python能够称为胶水语言是因为标准版本Python是C编译器编译的(如Linux下使用GCC编译器编译的),称为CPython。所以Python可以调用C语言,借助于C语言接口Python几乎可以驱动所有已知的软件。
需要说明的是,Python语言,它的底层是用C语言编写实现的,很多标准库和第三方库也都是用 C 写的。Python的解释器也是用C语言实现的。CPython是Python官方提供的。一般情况下提到的Python就是指CPython,CPython是基于C语言编写的,它实现的解释器能够将源代码编译为字节码(Bytecode),类似于Java语言,然后再由虚拟机执行,这样当再次执行相同源代码文件时,如果源代码没有被修改过,那么它会直接解释执行字节码文件,这样会提供程序的运行速度。
当然还有使用其他编程语言实现的Python。例如,用Python语言实现的Python称为 PyPy,用 Java 语言实现的 Python 称为 Jython,用 .NET 实现的 Python 称为 IronPython 等等。
- CPython的官网(Python标准官方网站):https://www.python.org
- PyPy的官网:https://www.pypy.org
- Jython的官网:https://www.jython.org
- IronPython的官网:https://ironpython.net
Python 的实现方式有很多种,Python 官网上介绍了 20 多种语言变体、方言或 C 语言之外的 Python 解释器实现。其中一些只是实现了语言核心语法、功能和内置扩展的一个子集,但至少有几个与 CPython 几乎完全兼容。更重要的是,在这些不同的实现方式中,虽然有些只是玩具项目或实验,但大部分都是为了解决某些实际问题而创建的,这些问题要么使用 CPython 无法解决,要么需要开发人员花费巨大的精力。
7)丰富的库
Python的标准库(官方提供的)种类繁多,它可以帮助处理各种工作,这些库不需要额外安装直接可以直接使用。除了标准库以外,还有许多其他高质量的第三方库可以使用。
8)规范的代码
Python采用强制缩进的方式使得代码具有极佳的可读性。(题外话:对于这一点我个人持保留意见)
9)支持函数式编程
虽然Python并不是一种单纯的函数式编程,但是也提供了函数式编程的支持,如函数类型、Lambda表达式、高阶函数和匿名函数等。
10)动态类型
Python是动态类型语言,它不会检查数据类型,在变量声明时不需要显式地指定数据类型。
Python的缺点:
其实上面每个问题现在都不是什么大问题,关于第一个问题,现在计算机的硬件速度越来越快,软件工程往往更关注开发过程的效率和可靠性,而不是软件的运行效率;至于第二个问题,则更不是问题,现在软件行业的大势本来就是开源。
Python是一门解释型编程语言,因此它具有解释型编程语言的运行机制。
计算机程序,其实就是一组计算机指令的集合,能真正驱动机器运行的是二进制机器指令,当让开发者直接编写机器指令是不现实的,因此就出现了计算机高级编程语言。高级语言允许使用自然语言(通常就是英语)来编程,但高级语言的程序最终必须被翻译成机器指令来执行。
高级语言按程序的执行方式可以分为编译型和解释型两种。
使用专门的编译器,针对特定平台(即操作系统)将某种高级语言源代码一次性“翻译”成可被该平台硬件执行的机器码(包括机器指令和操作数),并包装成该平台所能识别的可执行程序的格式,这个转换过程称为编译(Compile)。编译生成的可执行程序可以脱离开发环境,在特定平台上独立运行。
有些程序编译结束后,还可能需要对其他已经编译好的目标代码进行链接,即组装两个以上的目标代码生成最终的可执行程序,通过这种方式实现低层次的代码复用。
编译型语言是一次性编译成机器码的,所以可以脱离开发环境独立运行,而且通常运行效率会比较高。但因为编译型语言的程序被编译成特定平台上的机器码,因此编译生成的可执行程序通常无法移植到其他平台上运行;如果需要移植,则必须将源代码复制到特定平台上,针对该特定平台进行修改,至少需要采用特定平台上的编译器重新编译。
现有的C/C++、Objective-C、C#等高级语言都属于编译型语言。Java严格意义上说它也是编译型语言,只是它是先将源程序编译成Java字节码,再由特定平台上的JVM(Java虚拟机)将Java字节码编译成机器码,以此达到跨平台的目的。
是指使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行的语言。解释型语言通常不会进行整体性的编译和链接处理,解释型语言相当于把编译型语言中的编译和解释过程混合到一起同时执行。
可以认为:每次执行解释型语言的程序都需要进行一次编译,因此解释型语言的程序运行效率通常较低,而且不能脱离解释器独立运行。但解释型语言有一个优势,就是跨平台比较容易,只需提供特定平台的解释器即可,每个特定平台上的解释器都负责将源程序解释成特定平台的机器指令。解释型语言可以方便地实现源程序级的移植,无需修改程序源代码,但这是以牺牲程序执行效率为代价的。
Python语言属于解释型语言,因此运行Python程序时需要使用特定平台的解释器进行解释、执行。解释型的Python语言天生具有跨平台的能力,只要为Python提供相应平台的解释器即可。
Python 与 Java 语言一样,都是高级语言,他们不能直接访问硬件,也不能编译为本地代码运行。除此之外,Python几乎可以做任何事情。下面是Python语言主要的应用场景。
1)桌面应用开发
Python语言可以开发传统的桌面应用程序。Tkinter、PyQt、PySide、wxPython 和 PyGTK 等Python库可以快速开发桌面应用程序。
2)Web应用开发
Python也经常被用于Web开发。很多网站都是基于Python Web开发的。如豆瓣、知乎和Dropbox等。很多成熟的Python Web框架,如 Django、Flask、Tornado、Bottle 和 Web2py 等Web框架,可以帮助开发人员快速开发Web应用。
3)自动化运维
Python可以编写服务器运维自动化脚本。很多服务器采用 Linux 或 Unix系统,以前很多运维人员编写系统管理Shell脚本实现运维工作,而现在使用Python编写的系统管理脚本,在可读性、代码可重用性、可扩展性等方面优于普通Shell脚本。
4)科学计算
Python语言也广泛地应用于科学计算。NumPy、SciPy 和 Pandas 是优秀的数值计算和科学计算库。
5)数据可视化
Python语言也可将复杂的数据通过图表展示出来,便于数据分析。Matplotlib 库是优秀的可视化库。
6)网络爬虫
Python语言很早就用来编写网络爬虫。谷歌等搜索引擎公司大量地使用Python语言编写网络爬虫。从技术层面上讲,Python语言有很多这方面的工具,如 urllib、Selenium 和 BeautifulSoup 等,还有网络爬虫框架 scrapy。
7)人工智能
人工智能是现在非常火的一个研究方向。Python广泛应用于深度学习、机器学习和自然语言处理等方向。由于Python语言的动态特点,很多人工智能框架都是采用Python语言实现的。
8)大数据
大数据分析中涉及的分布式计算、数据可视化、数据库操作等,Python中都有成熟的库可以完成这些工作。Hadoop 和 Spark 都可以直接使用Python编写计算逻辑。
9)游戏开发
Python可以直接调用Open GL 实现3D绘制,这是高性能游戏引擎的技术基础。所以有很多Python语言实现的游戏引擎,如 Pygame、Pyglet 和 Cocos2d等。
Python官网:https://www.python.org
注意事项:需要将Python命令工具所在目录添加到系统Path环境变量中,即配置Path环境变量的值。
# Path环境变量(Python安装路径)
D:\Program Files\Python\
D:\Program Files\Python\Scripts\
##查看Python的版本号
> python -V
Python 3.10.4
通常情况下,Linux系统默认自带了Python开发环境。如果你想安装最新版的Python版本,可以通过下面两种方式安装。
方式1:源码安装(推荐)
方式2:Linux命令安装
略
1、代码编辑器
2、集成开发环境IDE
个人推荐使用 PyCharm 开发工具软件,使用和配置起来相对来说简单,安装成功就可以使用了。初学者建议不要一开始就使用IDE软件,应使用单纯的代码编辑器编写Python源程序代码,然后再使用Python解释器命令的方式执行,这种方式客观上可以帮助初学者记住Python的一些关键字,以及常用的函数和类,而集成开发环境适合于项目开发时使用,可以提高开发效率。
几个非常有帮助的与Python相关的学习网址(中文版):
Python 官方文档
Python 标准库
Python 教程
Python 常用指引
PEP 规范
<备注> PEP 是 Python Enhancement Proposals 的缩写。PEP是一种提案,用于为Python社区提供各种增强功能的技术说明规格说明书,提交新特性,以便让社区指出问题、改进技术文档。
编写Python语言的 "Hello wrold" 程序作为第一个Python程序,运行Python程序主要有两种方式:(1) 交互式方式运行;(2) 文件方式运行。
打开Windows系统的命令提示符界面(即Dos命令行),输入:Python,就可以进入Python Shell 界面。
C:\Users\xxx>python
Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello World.")
Hello World.
>>> str = "Hello World."
>>> print(str)
Hello World.
>>>
新建一个 hello.py 源文件,编辑如下内容:
string = "Hello, World."
print(string)
建议使用 UTF-8 的文件编码格式保存,进入到源文件的所在目录下,执行如下命令:
> python hello.py
Hello, World.
print()函数将字符串输出到控制台,类似于C语言的Printf()函数。print函数语法如下:
'''
print函数有5个参数
*object: 可变长度的对象参数
sep: 分隔符参数,参数默认值是一个空格
end: 输出字符串之后的结束符号,默认值是换行符
file: 输出文件传输,默认值sys.stdout是标准输出
flush: 为是否刷新文件输出流缓冲区,如果刷新字符串会马上打印输出,默认值不刷新
'''
print(*object, sep=' ', end='\n', file=sys.stdout, flush=False)
使用 sep 和 end 参数的 print 函数示例如下:
>>> print('Hello', end = ',')
Hello,>>>
>>> print(20, 18, 39, 'Hello', 'World', sep = '|')
20|18|39|Hello|World
>>> print(20, 18, 'Hello', 'World', sep = '|', end = ',')
20|18|Hello|World,>>>
上述代码中第1行用逗号(,) 作为输出字符串之后的结束符号。代码中的第3行用竖线(|) 作为分隔符。
Python官网
Python下载地址
CentOS7.6 源码安装 Python-3.7.4
《疯狂Python讲义》第1章-Python语言概述和开发环境
《Python编程:从入门到实践》第1章-起步
《Python从小白到大牛(第1版-2018)》第1章-开篇综述;第2章-搭建开发环境;第3章-第一个Python程序