第1章 Python简介
Python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。Python的语法简捷而清晰,同时有着丰富和强大的类库,可以满足日常开发方方面面的需求。
本章的主要内容是:
- 从整体上介绍Python语言。
- Python语言开发环境的安装。
- Python 3.X的特性。
1.1 Python的历史
Python的创始人为Guido van Rossum。1989年圣诞节期间,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。之所以选中Python(大蟒蛇的意思)作为程序的名字,是因为他是一个Monty Python的飞行马戏团的爱好者。
ABC是由Guido参加设计的一种教学语言。就Guido本人看来,ABC这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,Guido认为是非开放造成的。Guido决心在Python中避免这一错误(的确如此,Python与其他的语言如C、C++和Java结合得非常好)。同时,他还想实现在ABC中闪现过但未曾实现的东西。
就这样,Python在Guido手中诞生了。实际上,第一个实现是在Mac机上。可以说,Python是从ABC发展起来的,主要受到了Modula-3(一种相当优美且强大的语言,为小型团体所设计的)的影响,并且结合了UNIX和C的习惯。
虽然Python在国内受关注也只是近几年的事情,但是在计算机语言里面,Python可以算是历史悠久的语言。Python有着近20年的历史,版本的推进相当稳健,事实上Python历史比Java更悠久,后者是在1991年被设计出来的(当时名叫oak),而真正以Java这个名字闻名于世则是在1995年。
1.2 为什么使用Python
Python支持面向过程、面向对象、函数式编程以及其他编程风格,简洁而极具表达力的语法和丰富而实用的组件,能让我们事半功倍地完成任务。Python的开发效率要比Java、C/C++高出好几倍。有一个比较有意义的比较例子是在C、Java和Python三种语言之间进行的,目标是开发符合SSH(Secure Shell)服务端协议的软件包。
- C语言:OpenSSH,直接基于UNIX系统服务,从1999年开始开发,4年之后共有64 000行C源代码。2003年时,开发者列表上共有84人,平均每人写了762行代码,也就是190.5行/人年。
- Java语言:J2SSE,基于Java 1.3 Standard版提供的API,从2002年初开始开发,由SUN官方支持,2003年拥有20 000行Java源代码,开发者共7人,平均每人2857行代码,即1 428.5行/人年。
- Python语言:Conch,基于Twisted Framework,项目起点时间不详,大致为2002年中,到2003年共有5 000行源代码,开发者为1人,约4 000~5 000行/人年。
有人根据上面的案例推算,C、Java和Python的开发效率应该为1:4:10。Java是否可以比C语言高出4倍的开发效率,还是颇值得怀疑的。然而Python比C/C++和Java这样的静态语言高出几倍效力却是不争的事实。
值得一提的是,在Twisted网站官方文档上说,Conch的运行时性能并不逊色于OpenSSH。在同一台计算机上,OpenSSH每秒钟可接纳3个连接,传输速度为7.4MB/s。纯Python实现的Conch每秒钟可接纳8个连接,传输速度为3MB/s。经过Psyco编译优化后,每秒钟可接纳11个连接,传输速度为8.1MB/s。
不只是开发效率,Python帮助程序员更关注问题的本质,而不用担心语言的细节,不需要担心内存泄漏、意外中断。对于C/C++、Java程序员来说,Python是很好的原型开发工具,可以快速地实现大脑中的想法,在Python做出原型之后再使用Java,或者C/C++对性能需要提高的部分进行改造。
1.3 搭建Python开发环境
在开始讨论Python之前,必须要在计算机上运行Python,这对学习它是非常有益的。这样读者就可以一边学习一边运行案例代码了。
1.3.1 安装Python
Python的安装非常简单,直接从官方网站下载Python的安装程序。www.python.org提供了不同的操作系统上的Python安装包,为UNIX、Mac OS X提供了源码安装包,而对于Windows操作系统则提供二进制安装包(exe版本)。
读者可以按照自己的操作系统下载相应的版本,对于Windows和Linux,可以分别下载已经编译好的二进制编译版本,然后在操作系统里运行安装程序就可以安装到电脑中。
因为Python是一个开发的源代码的项目,所以可以下载Python的源代码到自己机器上编译,与使用二进制的发行版相比,这种方式给予了对安装选项更多的控制。对于需要在UNIX、Mac OS X操作系统安装Python的读者来说,尽量使用这种安装方式。
1. Windows下的直接安装
一般初学者会选择这种直接安装方式,这里给出详细步骤。
(1)打开https://www.python.org/downloads/官网,在首页就可以看到下载项,如图1.1所示。
图1.1 官网下载
(2)这里我们要根据自己的操作系统来选择,单击Windows连接进入具体的安装包下载界面。Windows版本包括32位和64位,根据自己的机器进行选择。
图1.2 选择版本
(3)下载后的文件名是python-3.7.0.exe,若是64位系统则下载后的文件名为python-3.7.0-amd64.exe。直接双击安装文件,安装首页如图1.3所示。在首页中勾选And Python 3.7 to PATH复选框,这样安装后就不需要再设置Python的执行路径。
图1.3 安装首页
(4)单击Install Now进行安装,安装速度很快,不需要做任何其他操作,安装完成的界面如图1.4所示,非常简单。
图1.4 完成页面
(5)单击Close按钮,此时在开始菜单会添加如图1.5所示的菜单项。这里有4项内容,分别是:
- IDLE(Python 3.7 64-bit):官方自带的Python集成开发环境。
- Python 3.7(64-bit):我们常说的Python终端。
- Python 3.7 Manuals(64-bit):CHM版本的Python 3.7官方使用文档。
- Python 3.7 Module Docs(64-bit):模块速查文档,有网页版本。
图1.5 Python的菜单项
(6)安装后,打开操作系统的“高级系统设置|高级|环境变量|用户变量|path”,会看到默认已经设置好了Python的路径,如图1.6所示。
图1.6 Python路径
2. 下载源码的安装方式
(1)首先从官网下载源代码,如图1.7所示。目前Python最新的版本为3.7.0,所以进入源码页面后选择Python 3.7.0。
图1.7 选择源码
(2)选择版本后,进入具体文件选择页面,如图1.8所示。
图1.8 选择具体文件
在官网上,一般提供了两种压缩格式的代码包:
- Gzipped source tarball:tgz格式,在UNIX下用tar和gunzip压缩的文件。
- XZ compressed source tarball:tar.xz格式,这是Linux下用XZ压缩的文件,XZ是一个免费的软件,是压缩软件中最新的压缩率之王。
对于tgz格式,我们可以使用下面的步骤解压:
%tar xzf Python-3.7.0.tgz
对于bz2格式,我们可以使用下面的步骤解压:
%xz -d Python-3.7.0.tar.xz %tar xvf Python-3.7.0.tar
(3)安装Python的源代码树到python/子目录中。在目录里可以找到README文件,它详细解释了安装的过程。总的来说,和编译其他开发源代码程序所使用的命令相同,也使用这些命令:./configure、make、make test、make install。一般先运行./configure,通常该命令后需要带具体的参数(参数参考README文档),configure运行结束以后,可以运行make编译源代码,然后make test编译测试文件,最后使用make install完成安装。
当然读者也可以在Windows下编译Python,可以使用Cygwin这样的POSIX模拟环境,也可以使用VC++编译器,详细的情况可以参考Win32目录下的README。
说明
POSIX表示可移植操作系统接口(Portable Operating System Interface of UNIX)。
1.3.2 运行Python
和编译式语言不同,可以有两种方式运行Python:
- 以交互的方式输入代码直接运行。
- 先创建程序文件,再运行。
以交互方式运行代码是体验Python最快的方式,很适合学习Python时使用,但是一般情况下都是创建程序文件,直接运行程序文件的。
1. 以交互方式运行Python
- 在Windows系统下,在系统菜单下单击Python菜单下的IDLE,或者直接打开cmd窗口,输入“python”命令。
- 在UNIX操作系统下,只需要在shell中输入“python”命令就可以了。
以Windows为例,运行Python的方式如图1.9所示。
图1.9 运行Python
2. Python程序
在Windows下,Python脚本和其他程序一样双击运行。当然,也可以在cmd窗口中输入程序名字运行,例如:
python test.py
在UNIX或者Linux下,可以在shell下,使用python+python程序文件名运行。例如,一个Python的程序名是test.py,那么我们可以用以下方式运行:
%python test.py
用chmod命令将test.py设置为可执行,就可以将其作为可执行程序来运行。
%./test.py
说明
一般Linux发行版本已经默认安装了Python,如需Python 3.7.0,需要将默认安装的Python删除后重新安装。
1.3.3 选择Python IDE
IDE的全称是Integration Development Environment(集成开发环境),一般以代码编辑器为核心,包括一系列周边组件和附属功能。一个优秀的IDE,最重要的就是在普通文本编辑之外提供针对特定语言的各种快捷编辑功能,让程序员尽可能快捷、舒适、清晰地浏览、输入、修改代码。对于一个现代的IDE来说,语法着色、错误提示、代码折叠、代码完成、代码块定位、重构、调试器、版本控制系统(VCS)的集成等都是重要的功能。
IDE是用来帮助程序员编程的工具,一个良好的IDE能够大大地提高程序员的开发效率。Python的IDE种类繁多,下面对常用的IDE进行介绍,不过建议本书读者尝试和掌握IDLE与PyCharm两种常用的IDE。
1. IDLE
IDLE是Python标准发行版内置的一个简单小巧的IDE,包括交互式命令行、编辑器、调试器等基本组件,足以应付大多数简单应用。IDLE是用纯Python基于Tkinter编写的,最初的作者正是Python之父Guido van Rossum本人。IDLE除了启动速度慢之外,功能太少也是一个很大的缺点,对于大型程序的开发不是非常方便。
说明
Tkinter是Python的一个模块,调用了TCL/Tk的接口。TCL/Tk是一个跨平台的脚本图形界面接口。
本书中一些简单的代码都会在IDLE中运行,以>>>开头,如图1.10所示。读者也可以不安装其他软件,使用这个简单的IDLE。
图1.10 IDLE
如果是比较长的代码,就单击File|New File菜单打开编辑器,如图1.11所示。编辑后的代码,可以按F5键运行(前提是需要先保存文件)。
图1.11 编辑代码
2. PyCharm
PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、Project管理、代码跳转、智能提示、自动完成、单元测试、版本控制。此外,该IDE提供了一些高级功能,以用于支持Django框架下的专业Web开发。
3. PythonWin
PythonWin是Python Win32 Extensions(半官方性质的Python for Win32增强包)的一部分,也包含在ActivePython的Windows发行版中。如其名字所言,只针对Win32平台。
总体来说,PythonWin是一个增强版的IDLE,尤其是易用性方面(就像Windows本身的风格一样)。除了易用性和稳定性之外,简单的代码完成和更强的调试器都是相对于IDLE的明显优势。
4. Emacs和Vim
这两个都是UNIX/Linux下的著名工具,并且号称是这个星球上最强大(以及第二强大)的文本编辑器。这两个工具,学习曲线都比较陡峭,并且设计理念是大量使用快捷键带来最大的便利,对于习惯于Windows底下GUI(图形用户界面,Graphical User Interface)操作的人来说,使用不太习惯。
5. VS Code & Atom
VS Code和Atom是支持全平台的IDE,它们自由免费,可以根据需要自行定制,可以自由添加、删除插件,对Python的支持非常好。它们是目前比较流行的IDE,但成也萧何败也萧何,就是太自由了,对初级用户而言可能就没有那么方便了。
6. Eclipse + PyDev
Eclipse是一个开放源代码的软件开发项目,专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。Eclipse是新一代的优秀泛用型IDE,具有不逊于Emacs和Vim的可扩展性,并且是图形化界面,操作起来也很方便。PyDev是Eclipse上的Python开发插件中最成熟完善的一个,而且还在持续的活跃开发中。除了Eclipse平台提供的基本功能之外,PyDev的代码完成、语法查错、调试器、重构等功能都相当出色,可以说在开源产品中是最为强大的一个,许多贴心的小功能也很符合编辑习惯,用起来相当顺手。PyDev更新速度很快,目前还在持续更新当中,缺点是Eclipse安装和配置略为麻烦,运行起来速度不快,而且比较占资源。
除了以上那些IDE以外,还有其他商业性的IDE可供选择,比如说WingIDE—Wingware公司开发的商业产品,总体来说是目前最为强大的专业Python IDE,是开源项目,可以申请到免费的license,最大的缺点和PyDev一样,速度较慢,资源占用多。Komodo是另一个优秀的商业产品,由ActiveState公司开发,是一个泛用的脚本语言IDE,除了Python外还支持JavaScript、Perl、PHP、Ruby等多种语言。读者可以在实践中选择自己喜欢的IDE,这里就不一一列举了。
在上面的IDE中,Eclipse + PyDev比较全面和方便,调试方式也和VC++较为相似。对于习惯图形界面调试的读者,使用较为方便。在开发大型的Python程序的时候,推荐读者使用。
1.4 Python语言特性
Python语言最大的一个特性就是简洁明了,可读性强,但并不是说Python没有Java、C、Ruby那么强大,Python同样拥有像Ruby那样动态语言强大的特性。本节叙述Python的语言特性。
1.4.1 Python的缩进
这是Python语言和其他语言非常不同的一个地方,Python使用缩进来表示程序块,而不用传统的大括号,或者用begin…end这样的字符来表示。请看下面的例子1.1。
例子1.1 缩进方式比较
01 //以下是C语言 02 int fib(int a) 03 { 04 if(a==1||a==2) 05 { 06 return 1; 07 } 08 else 09 { 10 return fib(a-1)+fib(a-2); 11 } 12 } 13 14 #以下是Python语言 15 def fib(a): 16 if a==1 or a==2: 17 return 1 18 else: 19 return fib(a-1)+fib(a-2)
上述代码中,第一个函数是C语言实现的(第2~12行),它的程序块是通过大括号来表示的。一对大括号,就表示一个程序块,而一个程序块则表示C语言的一个作用域。第15~19行的Python则通过缩进(一般是4个空格或者一个Tab键)来代替大括号。
说明
作用域是指某个变量有效的区域,在C语言中,根据作用域的不同,变量可以分为全局变量、局部变量等。
Python用缩进的方式来表达程序块,对于习惯于用其他语言的读者可能不太适应,但是其优点还是很明显的。通过这种表达方式,Python程序的风格比较统一,代码可读性也比较强,同时省去了敲大括号或者begin…end之类的符号。
Python通过缩进的层次来判断程序的执行顺序和逻辑。每个程序块和程序块是并行的关系还是包含的关系,取决于其缩进的空格数,如例子1.2所示。
例子1.2 Python缩进举例
01 def printok(a): 02 if a==0: 03 print("ok") 04 for i in range(5): 05 print("ok") 06 07 def printok1(a): 08 if a==0: 09 print("ok") 10 for i in range(5): 11 print("ok")
在上面的代码中,printok和printok1的代码不同的是for i in range(5)前面的空格数。在printok中,第4行的for i in range(5)多了四个空格,所以它就属于printok程序块的一部分,它的运行必须满足a==0这个条件;在printok1中,第10行的for i in range(5)的空格数和if a==0是一样的,所以它们是并行关系,不管a==0是否满足,for i in range(5)都会运行。
需要注意的是,Python缩进要使用Emacs的Python-mode默认值:4个空格一个缩进层次,永远不要混用制表符和空格。最流行的Python缩进方式是仅使用4个空格,其次是仅使用制表符。混合着制表符和空格缩进的代码将被转换成仅使用空格,这就可能会造成代码的缩进层次混乱。缩进方式不正确,也是初学者遇到的最常见的问题。
1.4.2 Python的序列
Python序列是Python重要的语言特性之一。Python含有多种序列、列表、元组(tuple)、字典,字符串其实也是序列。Python序列的特色是:序列可做运算,包括加法、乘法,可以做切片,支持序列的复制、序列可以负索引等。下面来看例子1.3。
例子1.3 Python序列的特性
>>> a=[1,2,3] >>> b=[4,5] >>> c=a+b >>> print(c) [1, 2, 3, 4, 5] >>> d=c*2 >>> print(d) [1, 2, 3, 4, 5, 1, 2, 3, 4, 5] >>> print(d[0:2]) [1, 2] >>> print(d[-3:-2]) [3] >>> print(d[-3:-1]) [3, 4]
1.4.3 对各种编程模式的支持
Python是一种面向对象的编程语言。不过不像其他面向对象的语言,Python并不强迫我们用面向对象的方法来写程序,允许我们用面向过程的方式来写模块、函数等。Python甚至可以使用函数式的编程方式来编程。
Python社区多为实用主义者,并不追求彻底完美的面向对象语法(比如Ruby和Java)。使用何种编程模式来编写程序取决于程序员的需要,不过Python对面向对象仍然支持得非常好,不但支持类、对象、继承、私有、公有成员、多态、重载这些面向对象语法,而且支持多重继承、类的公共属性等特性。
1.4.4 Python的动态性
Python支持的动态性主要包括:
- 语义的动态
- 语句的动态
- 对象属性的动态
- 基类的动态改变
1. 语义的动态
语义的动态改变,就是变量通过赋值来决定变量的类型,而且通过赋值可以改变变量的类型。目前大部分脚本语言都支持这个特性。下面来看例子1.4。
例子1.4 Python的动态语义
>>> a=1 >>> type(a) <class 'int'> >>> a='12' >>> type(a) <class 'str'> >>> a=1.3 >>> type(a) <class 'float'> >>> a=[1,2,3] >>> type(a) <class 'list'>
变量a,随着赋值操作,类型也随之发生变化,这就是语义的动态。
2. 语句的动态
语句的动态,是指Python可以把代码写到一个字符串里,然后运行,也可以执行一个文件里的代码,以把代码作为参数传给Python程序或者代码,Python代码本身可以作为参数传给Python程序运行,如下面的例子1.5所示。
例子1.5 Python代码作为参数传递
>>> i = 2 >>> j = 3 >>> exec("sum = i + j") >>> print("sum is : %s" %sum) Sum is : 5
3. 对象属性的动态
对象属性的动态,就是可以动态地新增一个对象的属性、删除一个属性、使用getattr()得到一个对象的属性、使用setattr()来修改设置对象的新属性、使用delattr()删除对象的属性。有时还可以用a.newattr=attr来设置新属性。下面来看例子1.6。
例子1.6 动态增加对象属性
>>> class A(object): ... a=3 ... >>> a=A() >>> print(a.a) 3 >>> setattr(a,"new_member","新参数") >>> print(a.new_member) 新参数
对象a是类A的实例化,通过setattr给对象a增加一个属性new_member。需要注意的是,我们给对象a增加属性new_member,并没有给类A增加new_member,所以用A实例化对象时,新对象仍然只有一个属性a。
说明
实例化就通过类生成一个对象实例,一般称为类实例化。这方面的知识在“类和对象”一章会详细介绍。
4. 基类的动态改变
继承基类的动态改变是指可以动态地改变一个类的继承基类、增加继承的基类,使一个类拥有新的基类方法,而不用修改原来的基类的方法。这个听起来比较抽象,现在讲会显得复杂,估计等学完“类和对象”就明白了。
1.4.5 匿名函数、嵌套函数
Python函数方面的语言特性主要包括参数可选、参数支持默认值,也可以改变参数的赋值顺序,而且支持像C语言printf那样的可变参数。Python支持单行函数、匿名函数、嵌套函数,还支持函数作为参数进行传递,这些特性使得Python能够支持函数式编程,像LISP或者Haskell那样使用函数式的思维模式进行编程。有关这部分内容,我们将在讨论函数的章节做详细讨论。
1.4.6 Python自省
自省的英文为introspection(有的翻译为“内省”,有的翻译为“反射”),是Python的一大特性。Guido创造Python时,不希望把Python创造成一个需要程序员不时去翻阅语法书的复杂语言,所以Guido给予了Python非常强大的自省能力。
所谓自省,对人而言,是指对某人自身思想、情绪、动机和行为的检查,如“吾日三省吾身”。对计算机编程而言,查找某些事物以确定它是什么、它知道什么以及它能做什么。通过自省能力,我们就可以通过Python解释器知道现在有什么对象、包、函数可用,用来做什么以及如何用等信息。自省能力还能动态地对对象的状态进行判断等。Python对自省提供了深入的广泛的支持,这个特性使得Python编程体验变得非常便捷。在本书以后章节会穿插一些小技巧点来介绍Python的自省能力。
除了上面的一些特性之外,Python还有很多语言特性,比如支持异常处理,并且支持异常中else判断,支持循环语句else(在Python的循环语句中,可以有else子句,表示没有使用break语句退出循环,即循环正常结束时要执行的语句,在for、while中均有),支持同时赋值,连接比较、对象持久化等各种特性,这些内容将在以后的章节具体讨论。
1.5 Python 2.X、Python 3.X与Python 3.7
相对于Python 2.X而言,Python 3.X的升级是一个较大的改变。为了不带入过多的累赘,Python 3.0在设计的时候没有过多地考虑向下兼容。许多Python 2.X的程序都无法在Python 3.X上运行(也有专门的程序可以将Python 2.X的程序转换成Python 3.X的程序)。新的Python程序建议使用Python 3.X版本的语法,而且大多数第三方库都正在努力地兼容Python 3.X版本。
1.5.1 Python 2.X和Python 3.X的区别
Python 2.X和Python 3.X内部变化在这里不会详述,这里只简述使用时最明显的几个变化,以便于读者看到Python的旧代码就知道是不是Python 2.X版本。
1. print()函数
在Python 2.X中,print是语句;到了Python 3.X,print是函数。
##Python 2.X中print的用法 >>> print "abcd" >>> print ("abcd") #print后面有空格 >>> print("abcd") ###Python 3.X中print的用法 >>> print("abcd")
可以看出,在Python 3.X中print只能以函数的方式调用。
2. 数据类型
Python 3.X去除了long类型,只有一种整型——int,但它的范围就像Python 2.X版本的long。
Python 3.X新增了bytes类型,对应于Python 2.X版本的八位串。
Python 2.X有ASCII str()类型,unicode()是单独的,不是byte类型。现在,在Python 3.X中有了Unicode(UTF-8)字符串,以及一个字节类:byte和bytearrays。Python 3.X源码文件默认使用UTF-8编码。
3. range和input
在Python 2.X中有两种方式可以创建列表(有序序列)range和xrange,一个生成的是列表,一个生成的是生成器。到了Python 3.X中,只剩下了一个range()函数可用,而且在Python 3.X中range()函数返回的是一个对象。这跟Python 2.X是截然不同的。
Python 3.X中的input()函数完全取代了Python 2.X中的raw_input()函数。Input的返回值必定是一个字符串。这样就避免了输入参数类型的麻烦。
4. 模块改名
Python 3.X整合了Python 2.X几个功能相似的模块,削减了几个不常用或者重复的功能,并将几个模块改名。如Python 3.X将Python 2.X中的urllib2、urlparse、robotparser并入urllib模块。
1.5.2 Python 3.7的新增功能
与Python 3.6相比,Python 3.7于2018年6月27日发布,本小节介绍几个常用的新增功能。对于入门读者而言,这些内容其实并不简单,所以读者也可以直接略过。
1. 强制UTF-8运行时模式
UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,其优势是使用UTF-8编码的文字可以在各国各种支持UTF-8字符集的浏览器上显示,不管是中文简体、中文繁体还是日文、韩文等。
Python一直支持UTF-8,但是本地语言环境(locale)有时仍是ASCII码,而不是UTF-8,检测语言环境的机制并不总是很可靠,所以Python 3.7添加了UTF-8运行时模式(假设UTF-8是环境提供的语言环境),可通过-X utf8 PYTHONUTF8命令行开关启用,在POSIX语言环境中,UTF-8模式默认情况下已被启用,但在其他位置默认情况下被禁用,以免破坏向后兼容。
2. 具有纳秒分辨率的新时间函数
现代系统中时钟的分辨率可能超过time.time()函数及其变体返回的浮点数的有限精度。为了避免精度损失,Python 3.7为模块增加了现有定时器功能的6个新“纳秒”变体time,这些函数会以整数值的形式返回纳秒数。
- time.clock_gettime_ns()
- time.clock_settime_ns()
- time.monotonic_ns()
- time.perf_counter_ns()
- time.process_time_ns()
- time.time_ns()
3. 内置breakpoint()
Python附带内置的调试器,也可以连入第三方调试工具,只要它们能与Python的内部调试API进行对话。不过,Python到目前为止缺少一种从Python应用程序里面以编程方式触发调试器的标准化方法。
Python 3.7添加了breakpoint(),可使函数被调用时让执行中断然后切换到调试器。相应的调试器不一定是Python自己的pdb,可以是之前被设为首选调试器的任何调试器。以前,调试器不得不手动设置,然后调用,因而使代码更冗长。有了breakpoint()后,只需一个命令即可调用调试器。
除以上介绍的3个常见特色外,还有以下几个改变:
- 基于散列的.pyc文件。
- 自定义对模块属性的访问。
- 面向开发者的运行时模式。
- 新的dataclass()装饰器。
- 新的模块contextvars。
1.6 开始编程:第一个Python Hello World
既然是第1章,我们就来写一个简单的Hello World。打开IDEL,输入如例子1.7所示的代码。
例子1.7 Hello World
>>> print("Hello World") Hello World
好了,是不是很简单?
1.7 本章小结
本章主要从整体上介绍了Python语言的历史和语言特性,讨论了Python的安装和Python IDE的选择,下一章将开始Python语言之旅。