HCS                             

HCS                             

功能页表

Python

Python简介

Python是可以称得上即简单又功能强大的少有的语言中的一种。你将会惊喜地发现,专注于问题的解决方案而不是你正在使用的编程语言的语法以及结构,是多么容易。官方对Python的介绍Python是一个易于学习的、功能强大的编程语言。它具有高效的高级数据结构和能够简单有效地实现面向对象编程。Python优美的语法和动态类型,连同解释型特性一起,使其在多个平台的许多领域都成为脚本处理以及快速应用开发的理想语言。

在下一节,我将更详细地讨论这些特性。名字背后的故事Python语言的发明人Guido van Rossum以BBC的喜剧《Monty Python's Flying Circus》给这个语言命名。他不是特别喜欢那些为了食物而杀死动物的蛇,这些蛇会用它们长长的身体缠绕住那些动物从而勒死它们。Python的起源贵铎·范·罗萨姆(Guido van Rossum)于1989 年底始创了Python,那时,他还在荷兰的CWI(Centrum voor Wiskunde en Informatica,国家数学和计算机科学研究院)。1991 年初,Python 发布了第一个公开发行版。这一切究竟是如何开始的呢?像C、C++、Lisp、Java和Perl 一样,Python 来自于某个研究项目,项目中的那些程序员利用手边现有的工具辛苦的工作着,他们设想并开发出了更好的解决办法。

那时范·罗萨姆是一位研究人员,对解释型语言ABC 有着丰富的设计经验,这个语言同样也是在CWI 开发的。但是他不满足其有限的开发能力。已经使用并参与开发了像 ABC 这样的高级语言后,再退回到C 语言显然是不可能的。他所期望的工具有一些是用于完成日常系统管理任务的,而且它还希望能够访问Amoeba分布式操作系统的系统调用。尽管范·罗萨姆也曾想过为Amoeba开发专用语言,但是创造一种通用的程序设计语言显然更加明智,于是在1989 年末,Python 的种子被播下了。Python文件扩展名Python 源文件通常用.py 扩展名。当源文件被解释器加载或者显式地进行字节码编译的时候会被编译成字节码。由于调用解释器的方式不同,源文件会被编译成带有.pyc 或.pyo 扩展名的文件,你可以在后续章节学到更多的关于扩展名的知识。

Python的特点

尽管Python 已经流行了超过15 年,但是一些人仍旧认为相对于通用软件开发产业而言, 它还是个新丁。我们应当谨慎地使用“相对”这个词,因为“网络时代”的程序开发,几年看 上去就像几十年。

当人们询问“什么是Python”的时候,很难用任何一个具象来描述它。人们更倾向于 一口气不加思索地说出他们对Python 的所有感觉,这些特点究竟 又是什么呢?为了让你能知其所以然,我们下面会对这些特点进行逐一地阐释。简单Python是一门简单而文字简约的语言。阅读好的Python程序感觉就像阅读英语,尽管是非常严格的英语。Python的这种伪代码特性是其最大强项之一,它可让你专注于解决问题的办法而不是语言本身。容易学习正如你即将看到的,Python非常容易上手。就像刚刚提到的,Python具有格外简单的语法。免费开源Python是一个FLOSS(自由/自由与开源软件)的例子。在一些简单的条款之下,你可以自由地分发这个软件的拷贝,阅读其源代码,修改它,或者将其一部分用到新的自由程序中。FLOSS是基于共享知识社区的概念,这是Python如此好的原因之一——它是由那些希望看到更好的Python的社区创建和不断改进的。高级语言当你使用Python编写程序时,你永远不需要担心低级细节,比如你的程序管理内存的使用等。可移植基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。只要你足够小心,避免使用系统相关特性,你的所有Python程序都可以不加修改地运行在这其中任意平台。

你可以在Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acorn RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE,甚至PocketPC平台上使用Python。

你甚至可以使用类似Kivy平台为iOS(iPhone、iPad)和Android创建游戏。解释型这需要一些解释。

使用编译型语言(像C或者C++)编写的程序,会由编译器使用一系列标志和选项,将源代码(如C或者C++)转换成一种电脑能够识别的语言(二进制代码,也就是0和1)。在运行程序时,链接器/载入软件将程序从硬盘复制到内存,然后开始运行。

换句话说,Python不需要编译成二进制代码。你只需从源代码直接运行程序。在内部,Python将源代码转换成一种称为字节码的中间格式,然后将其翻译你的计算机的机器语言,然后开始运行。事实上,这一切都让Python的使用更为简单,因为你不必担心程序的编译、保证恰当的库被链接和载入等等。这也使得你的Python程序更易于移植,因为你只需要复制你的Python程序到另外一台计算机,然后它就可以工作了!面向对象Python同时支持面向过程和面向对象编程。在面向过程语言中,程序围绕着过程或者函数(只不过是可重复使用的程序片段)构建。在面向对象语言中,程序围绕着对象(数据和功能的组合)构建。Python具有非常强大但是过于简洁的执行面向对象编程的方式,特别是相对于C++或者Java这种大型语言来说。可扩展如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。可嵌入你可以将Python嵌入到C/C++程序,让你的程序的用户获得“脚本化”的能力。扩展库Python标准库的确很大。它能够帮助你完成许多工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI(公共网关接口)、FTP(文件传输协议)、电子邮件、XML(可扩展标记语言)、XML-RPC(远程方法调用)、HTML(超文本标记语言)、WAV(音频格式)文件、加密、GUI(图形用户界面)以及其它系统相关的代码。记住,只要安装了Python,所有这些都能做到。这叫做Python的“遥控器”哲学。

除了标准库,还有各式各样的其它高质量库,你可以在Python包索引找到它们。小结Python的确是一个激动人心的功能强大的语言。Python那种性能和特性的恰到好处的组合让使用Python编程既有趣又简单。

Python 2与Python 3

如果你不关心Python 2和Python 3的区别,可以跳过这一节。但是必须知道你所用的版本。

2008年,这部教程为Python 3重写过,是使用Python 3的最早的教程之一。不幸的是,这对于那些读着本教程却在使用Python 2的读者感到困惑,反之亦然。但慢慢地,大家都转移到了Python 3。

所以,在本书中你将要学习使用Python 3,即使最终你还想用Python 2。记住,一旦你充分地理解或学习使用了其中的一个,你可以很容易学到两个版本之间的区别,然后很容易的适应。困难的是学习编程和理解Python语言的核心,这是本教程的目标。一旦你达到这个目标,你可以根据自己的情形很容易的使用Python 2或Python 3。

关于Python 2和Python 3的详细区别,请参考这里。大家对Python的评价或许你会对顶尖的黑客,比如ESR,怎么看待Python感兴趣:Eric S. Raymond,是《The Cathedral and the Bazaar》的作者,也是发明开放源代码这一术语的人。他说,Python已经成为他最喜欢的编程语言。这篇文章给我第一次关注Python的真正灵感。Bruce Eckel,是著名的《Thinking in Java》和《Thinking in C++》的作者。他说,没有什么语言能比Python更能令他高效。他说,Python或许是唯一让程序员工作更简单的一个语言。请看完整的采访。Peter Norvig,是著名的Lisp的作者,Google搜索质量主管(感谢Guido van Rossum指出)。他说,Python一直是Google的主要部分。你可以通过查看Google Jobs验证这句话。这个页面上显示出,Python知识是招聘软件工程师的要求之一。

Python的安装

在Windows上安装到Python官网(http://www.python.org/)下载最新版本的Python安装包。安装过程和其它基于Windows的软件类似。

注意:当提示某些“可选”组件的时候,不要不选。

DOS提示符
如果你想要在Windows命名行,例如DOS提示符,使用Python,那么你需要正确设置PATH变量。

对于Windows 2000、XP、2003,点击控制面板---系统---高级---环境变量。在“系统变量”中点击PATH,选择编辑,然后在已有内容的最后部分添加;C:Python33(请核实存在该文件夹,对于较新版本Python来说,文件夹的名字可能不同)。当然,要使用正确的目录名。

对于早期版本的Windows:
打开C:AUTOEXEC.BAT文件,添加一行“PATH=%PATH%;C:33”(不含引号),然后重启系统。对于Windows NT,使用AUTOEXEC.NT文件。

对于Windows Vista:点击“开始”,选择“控制面板”。点击“系统”,在右侧您将看到“查看计算机基本信息”。左侧是一个任务列表,其最后一项是“高级系统设置”,点击它。显示“系统属性”对话框“高级”选项卡。点击右下角的“环境变量”按钮。在下方标题为“系统变量”框中,滚动“Path”,点击“编辑”按钮。按需修改路径。重启系统。除非重启,Vista不会意识到系统路径变量的修改。
对于Windows 7:在桌面上右击“计算机”,选择“属性”;或点击“开始”,选择“控制面板”---“系统和安全”---“系统”,点击左侧的“高级系统设置”,然后选择“高级”选项卡。点击底部的“环境变量”按钮,在下方的“系统变量”中找到PATH变量,选中它点击“编辑”。在变量值的最后,追加;C:Python33。如果这个值是%SystemRoot%system32;,它将变成%SystemRoot%system32;C:Python33。点击“确定”完成。不需要重启。
在Windows命令行上运行Python
对于Windows用户,如果正确设置了PATH变量你可以在命名行运行解释器。

要打开Windows终端,点击开始按钮,点击“运行”。在对话框输入cmd,按下回车键。

然后输入python -V,会输出Python的版本号,确保没有错误。在Mac OS X上安装对于Mac OS X用户,通过按Command+Space键打开终端(打开Spotlight搜索),输入Terminal然后回车。

安装Homebrew时运行:
ruby -e "$(curl -fsSkL raw.github.com/mxcl/homebrew/go)"

然后安装Python 3 使用
brew install python3

现在,运行python3 -V,确保没有错误。在Linux上安装对于Linux用户,通过打开Terminal应用程序打开终端,或者按下Alt + F2,然后输入gnome-terminal。如果不成功,请参考文档或你所用Linux发行版的论坛。

下一步,我们需要安装python3包。例如,在Ubuntu上,可以使用sudo apt-get install python3。请参阅文档或是你安装的Linux发行版的论坛,寻找正确的包管理器运行。

一旦你完成安装,在shell运行python3 -V,在屏幕上你应该能够看到Python版本:
$ python3 -V
Python 3.3.0

注意:是shell的提示符,根据你电脑上的操作系统的设置会有所不同,因此我将使用$符号。

新的发行版默认安装?
新的发行版,例如Ubuntu 12.10将Python 3作为默认版本,所以,检查一下是不是已经安装了。总结现在开始,我们假设你已经在你的系统上安装好了Python 3。

接下来,我们将开始编写我们的第一个Python 3程序。

输出Hello World

现在,我们将看到在Python中如何运行一个传统的“Hello World”程序。这将教你如何写、保存和运行Python程序。

使用Python运行你的程序有两种方法——使用交互式解释器提示符或使用一个源文件。现在,我们将看到如何使用这两种方法。使用解释器提示符在您的操作系统中打开终端(如上节所示),然后,输入“python”按回车键,打开Python提示符。

一旦你启动python,您应该看到“>>>”,这被称为“Python解释器提示符”,你可以开始输入的东西。

在Python解释器提示符下,输入print('Hello World') 后按回车键。您应该看到输出了单词“Hello World”。

当使用一个Mac OS X计算机,下面是你将看到的一个例子。Python软件的细节会根据你的电脑不同而有所不同,但从提示符(即从“>>>”开始)与操作系统无关,应该是相同。

$ python
Python 3.3.0 (default, Oct 22 2012, 12:20:36)
[GCC 4.2.1 Compatible Apple Clang 4.0 ((tags/Apple/clang-421.0.60))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print('hello world')
hello world
>>>

注意,Python让你的代码行立即输出了!你刚才输入的是一个Python 语句。我们使用print打印出(不出所料)你提供给它的任何值。在这里,我们提供的是文本“Hello World”,并立即打印到屏幕上。如何解释器提示符如果你正在使用一个Linux或Unix shell,您可以通过按下“ctrl - d’或输入“exit()“(注意:记得包含括号“()”),然后输入回车键。如果您使用的是Windows命令行提示符,按“ctrl - z”键再按“回车”键,退出解释器提示符。

Python编辑器

我们不能在每次想要运行一些东西的时候都要在解释器提示符下输入我们的程序,所以我们必须把它们保存为文件,这样我们可以任意次地运行我们的程序。

要创建我们的Python源文件,我们需要一个可以输入并保存它们的编辑软件。一个优秀的程序员的编辑器将使你写源代码文件的生活更容易。因此,选择一个编辑器确实至关重要。你必须选择一个编辑器,就像你选择要买的汽车一样。一个好的编辑器会帮助您很容易地编写Python程序,(就像一辆车可以让你)以一个更快和更安全的方式,让你的旅程更舒适,并且可以帮助你达到你的目的地(实现你的目标)。

一个非常基本的需求是语法高亮显示,分别以不同的彩色显示你的Python程序所有的不同部分,以便您可以看到你的程序且使其运行可视化。

如果你不知道从哪里开始,我推荐可以在Windows、Mac OS X和Linux上使用的Komodo Edit软件。

如果您使用的是Windows,不要使用记事本——这是一个糟糕的选择,因为它不做语法高亮显示,而且更重要的是它不支持文字的缩进——之后我们在我们的例子中会看到,缩进是非常重要的。好的编辑器如Komodo Edit会自动地做到这一点。

如果你是一名有经验的程序员,那么你一定已经使用Vim或(Emacs)(http://www.gnu.org/software/emacs/)了。不用说,这是两个最强大的编辑器,使用它们来写你的Python程序,你会从中受益。就我自己而言,在我的大多数项目,甚至写一整本书都在用Vim。,从长远来看Vim或者Emacs是非常有用的,如果你愿意花时间去学习,那么我强烈建议你使用它们。然而,正如我之前提到的,初学者在这一刻,可以从 Komodo Edit开始集中学习Python而不是编辑器。

再次重申,请选择一个适当的编辑器,它可以使编写Python程序更有趣和更容易。

对Vim用户
John M Anderson有一个很好的如何(使Vim成为强大的Python IDE)(http://blog.sontek.net/blog/detail/turning-vim-into-a-modern-python-ide)的介绍。还推荐jedi-vim插件和我自己的dotvim配置

对Emacs用户
Pedro Kroger有一个很好的如何使Emacs成为强大的Python IDE的介绍。还建议BG的dotemacs配置

Python源文件

现在让我们回到编程。每当你学习一种新的编程语言时,有一个传统,你编写和运行的第一个程序是“Hello World”程序——当你运行它时,它所做的只是说“Hello World”。正如Simon Cozens(神奇的"Beginning Perl"的作者)所说,这是“向编程神祈求帮你更好学习语言的传统咒语。”

开始你选择的编辑器,输入以下程序并将其保存为“hello.py’。

如果你使用Komodo编辑器,点击File --- New --- New File,输入下行:print('Hello World')在Komodo编辑器,选File --- Save保存文件。

你应将文件保存在哪里?你知道位置的任何文件夹。如果你不明白这是什么意思,创建一个新文件夹,并使用该位置保存和运行你所有的Python程序:C:py 在Windows上/tmp/py 在Linux上/tmp/py 在Mac OS X上
使用'mkdir'命令在命令行创建一个文件夹,例如,“mkdir/tmp/py”。

注意:总要确保你给它的文件扩展名是.py,例如,“foo.py”。

在Komodo Edit,请单击“Tools”---“Run Command”,输入"python3 hello.py",单击“Run”,你应该看到打印输出的内容。

尽管最好的方式是在Komodo中输入它,但在命令行也可以:打开在安装章节中介绍的一个命令行。Change directory(改变路径)到你保存文件的目录,例如cd /tmp/py在命令行输入python3 hello.py命令运行程序。
输出如下所示:
$ python3 hello.py
Hello World

如果你得到了如上所示有输出,祝贺你!——你已经成功地运行了你的第一个Python程序。您已经成功地越过学习编程最难的部分--开始你的第一个程序!

如果你得到了一个错误,请完全输入如上所示程序,再次运行这个程序。注意,Python是区分大小写的,即“print”并不等于“Print”——注意,前者是小写字母“p”和后者是大写字母“P”。同样,确保每一行的第一个字母之前没有空格或制表符——之后我们将明白为什么这很重要。它是如何工作的Python程序是由语句组成,在我们的第一个程序中,我们只有一个语句,在这个语句中,我们调用“print”函数,它只是打印文本“Hello World”。我们在(稍后章节](#函数)将详细学习函数——你现在应该理解的是,无论你在括号提供什么,都将打印到屏幕上。在本例中,我们提供了文本“Hello World”。可执行的Python程序这只适用于Linux和Unix用户,但Windows用户应该知道。

每次,你想要运行一个Python程序,我们必须显式地调用的“python3 foo.py”,但是我们为什么不能像运行我们电脑中的其它任何程序一样运行它呢?我们通过使用叫hashbang行代码可以实现。

添加下面的一行作为程序的第一行:#!/usr/bin/env python3这样,你的程序应该像现在这样:#!/usr/bin/env python3

print('Hello World')第二,我们必须给程序的可执行权限--使用' chmod '命令,然后运行源程序。

这里使用的chmod命令是change the mode of the file (改变文件的模式),通过给系统All(所有)用户execute(可执行)权限。
$ chmod a+x hello.py

现在,我们可以直接运行我们的程序,因为我们的操作系统调用“/usr/bin/env”,它按次序找到我们的Python 3软件,然后知道如何运行我们的源文件:
$ ./hello.py
Hello World

我们使用“./”用来指示程序在当前目录中。

为了让事情变得更有趣,你可以将文件重命名为“hello”然后像“./hello”这样运行它,因为系统知道它必须使用源代码文件中第一行指定位置的解释器运行它,所以它仍将工作。

到目前为止,我们已经能够运行我们的程序,只要我们知道确切的路径。如果我们希望能够运行该程序从文件夹?您可以通过将程序存储在列在“路径”环境变量中的一个文件夹中来实现。

无论你何时运行任何程序,系统在列在“PATH”(路径)环境变量中的每个文件夹查找该程序,然后运行程序。我们通过简单地复制这个源文件到“PATH”(路径)列出的目录中,可以让这个程序到处可用。

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/swaroop/bin
$ cp hello.py /home/swaroop/bin/hello
$ hello
Hello World

使用'echo'(回响)命令和变量(PATH)名称加前缀'$',指示shell我们需要“环境变量”的值,我们可以显示“PATH”(路径)变量的值。我们看到,“/home/swaroop/bin”是PATH变量中的一个目录,* swaroop *是在我的系统中我用的用户名,通常在你的系统中为你的用户名,会有一个类似的目录。

如果你想添加您所选择的目录到“PATH”变量中——这可以通过运行“export PATH=$PATH:/home/swaroop/mydir”,“:/home/swaroop/mydir”是我想添加到“PATH”变量中的目录。

如果你想写可以在任何时间、在任何地点运行的命令,这个方法非常有用。这就像创建你自己的在命令行使用的命令,就像“cd”或任何其他命令。

Python help()

如果您需要快速获取任何的Python函数或语句的信息,那么您可以使用内置的“help”(帮助)功能。这是非常有用的,尤其是当使用翻译提示符时,例如,运行‘help(print)”——这将显示print函数的帮助--用于打印东西到屏幕上。

注意:按q退出帮助。

类似地,您可以获得Python中几乎任何事情的信息,使用“help()”去学习更多关于使用“help”本身的信息!

如果你需要获取操作符,如“return”的帮助,那么你只需要把这些放到引号内部,如“help('return'),所以,对于我们试图要做的事情,Python并不感到困惑。总结现在,你可以自由自在地编写、保存和运行Python程序了。

既然你是一名Python用户,让我们学习一些Python概念。 # 基础

只是打印“Hello World”是不够的,是吗?你想要做的不仅仅是这些,你想带一些输入,操纵它,得到些输出。在Python中,我们使用常量和变量可以实现这些。在这一章,我们还将学习一些其他的概念。

Python注释

注释是#符号右边的任何文字,它对读程序的人有很大注释用处。例如:print('Hello World') # 注意:print是一个函数或者:# 注意:print是一个函数 print('Hello World')在你的程序中,你尽可能使用有用的注释:解释设想解释重要决策解释重要细节解释你在试图解决的问题解释程序中你在努力克服的问题,等等。
代码告诉你怎样做,注释告诉你这样做的原因。

这对你的程序的读者是有用的,他们可以很容易地理解程序做什么。记住,六个月后这个人可以是你自己!

Python数字

Python 支持四种基本数字类型,它们分别是:int (有符号整数)long (长整数)float (浮点值)complex (复数)下面是一些例子:
类型举例int0101 84 -237 0x80 017 -680 -0x92long29979062458L -84140l 0xDECADEDADEFFEDBACALfloat3.1415926 4.2E-10 -90. 6.022e23 -1.609E-19complex6.23+1.5j -1.23-875J 0+1j
Python 中有两种有趣的类型是 Python 的长整型和复数类型。请不要将Python 的长整数与C 语言的长整数混淆。Python 的长整数所能表达的范围远远超过C 语言的长整数, 事实上,Python 长整数仅受限于用户计算机的虚拟内存总数。如果你熟悉 Java, Python 的长整数类似于 Java 中的BigInteger 类型。

从长远来看, 整型与长整型正在逐步统一为一种整数类型。从Python2.3 开始,再也不会报整型溢出错误, 结果会自动的被转换为长整数。在未来版本的Python 中, 两种整数类型将会无缝结合, 长整数后缀 “L”也会变得可有可无。

其实还有第五种数字类型, decimal, 用于十进制浮点数。不过它并不是内建类型, 你必须先导入 decimal 模块(模块将在后续章节中讲解)才可以使用这种数值类型。 由于需求日渐强烈,Python 2.4 增加了这种类型。举例来说, 由于在二进制表示中有一个无限循环片段,数字1.1 无法用二进制浮点数精确表示。因此, 数字1.1 实际上会被表示成:
>>> 1.1
1.1000000000000001
>>> print decimal.Decimal('1.1')
1.1

Python字符串

字符串是字符的一个序列,字符串通常只是一串单词。

在你写的每一个Python程序中都要使用字符串,因此要注意以下部分。单引号你可以使用单引号例如'Quote me on this'指定字符串。所有的空白,例如空格和制表符都按原样保留。双引号在双引号中的字符串和在单引号中的字符串工作起来完全一样。例如"What's your name?"三重引号您可以使用三重引号-("""或''')指定多行字符串。在三重引号中您可以自由使用单引号和双引号。例如:'''This is a multi-line string. This is the first line. This is the second line. "What's your name?," I asked. He said "Bond, James Bond." '''字符串是不可改变的这意味着,一旦您已经创建了一个字符串,你就不能改变它。虽然这看起来似乎是一件坏事,但它真不是(坏事)。在我们后面看到的各种程序中,将会明白这不是一个限制。

C/C++程序员要注意,在Python中没有单独的“char”(字符型)数据。这里没有真正的需要它,我相信你不会错过它。

Perl/PHP程序员要注意,单引号字符串和双引号字符串是相同的——他们不以任何方式不同。格式方法有时,我们可能想要从其它信息构建字符串。这就是“format()”方法有用之处。

保存下面几行到文件"str_format.py"中:age = 20 name = 'Swaroop'

print('{0} was {1} years old when he wrote this book'.format(name, age)) print('Why is {0} playing with that python?'.format(name))输出:
$ python3 str_format.py
Swaroop was 20 years old when he wrote this book
Why is Swaroop playing with that python?

它是如何工作的?
一个字符串可以使用特定的格式,随后调用format方法,用format方法替代那些使用适当参数的格式。

观察使用第一处,我们使用“{0}”对应于变量‘name’,这是format(格式)方法的第一个参数。类似的,第二个格式是“{1}”对应的“age”,这是格式方法的第二个参数。注意,Python从0开始计数,这意味着第一位置的索引是0,第二个位置的索引是1,等等。

注意,我们可以使用字符串的连接,name+'is'+str(age)+'years old' 实现同样的目的,但这非常讨厌、容易出错。第二,在这种情况下,通过format方法自动转换为字符串,而不是显式地转换为需要的字符串。第三,当使用的format 方法,我们可以改变消息,而无需处理使用的变量,反之亦然。

还要注意,这些数字(索引)都是可选的,所以你也可以写成:age = 20 name = 'Swaroop'

print('{} was {} years old when he wrote this book'.format(name, age)) print('Why is {} playing with that python?'.format(name))这将给与前面的程序相同的输出。

Python在format方法中做的是,用每个参数值替代规格的地方。这里有更详细的规格,如:decimal (.) precision of 3 for float '0.333' >>> '{0:.3}'.format(1/3) fill with underscores (_) with the text centered (^) to 11 width '___hello___' >>> '{0:_^11}'.format('hello') keyword-based 'Swaroop wrote A Byte of Python' >>> '{name} wrote {book}'.format(name='Swaroop', book='A Byte of Python')

Python标识符

标识符是电脑语言中允许作为名字的有效字符串集合。其中,有一部分是关键字,构成语言的标识符。这样的标识符是不能做它用的标识符的,否则会引起语法错误(SyntaxError 异常)。合法的Python 标识符Python 标识符字符串规则和其他大部分用C 编写的高级语言相似:第一个字符必须是字母或下划线(_);剩下的字符可以是字母和数字或下划线;大小写敏感。标识符不能以数字开头;除了下划线,其他的符号都不允许使用。处理下划线最简单的方法是把它们当成字母字符。大小写敏感意味着标识符foo 不同于Foo,而这两者也不同于FOO。Python关键字一般来说,任何语言的关键字应该保持相对的稳定,但是因为Python 是一门不断成长和进化的语言,关键字列表和iskeyword()函数都放入了keyword模块以便查阅。
Python关键字andas1assert2breakclasscontinuedefdelelifelseexceptexecfinallyforfromglobalifimportinislambdanotorpassprintraisereturntrywhilewith3yield4None5
注意:从Python1.4 开始关键字access 就被废除了;Python2.6 时加入;Python1.5 时加入;Python2.3 时加入;Python2.4 中非关键字常量。built-in 标识符Python 还有称为 built-in 标识符集合,这些名字可以由解释器设置或使用,虽然它们不是保留字,但是不推荐使用这些特别的名字。

虽然 built-in 标识符不是关键字,但是应该把它当作“系统保留字”,不做他用。

Python变量与赋值

变量用来存储数据,是标识符的一种。Python 变量的命名规则与标识符的命名规则一样。

Python 是动态类型语言, 也就是说不需要预先声明变量的类型,变量的类型和值在赋值那一刻被初始化。
>>> counter = 0
>>> miles = 1000.0
>>> name = 'Bob'
>>> counter = counter + 1
>>> kilometers = 1.609 * miles
>>> print '%f miles is the same as %f km' % (miles, kilometers)
1000.000000 miles is the same as 1609.000000 km

Python 也支持增量赋值,也就是运算符和等号合并在一起, 看下面的例子:n = n * 10将上面的例子改成增量赋值方式就是:n *= 10两点注意:Python的变量名是大小写敏感的。也就是说变量 "cAsE" 与 "CaSe" 是两个不同的变量。Python 不支持自增和自减运算符。这是因为 + 和 - 也是单目运算符,Python 会将 --n 解释为-(-n) 从而得到 n,同样 ++n 的结果也是 n。

Python逻辑行与物理行

物理行是当你写程序时看到的一行。逻辑行是Python 看和的一个单独语句。Python默认一个物理行为一个逻辑行。

一个逻辑行是一个语句,像print('Hello World')--如果它本身在一行上(像你在一个编辑器中看到的),那么,它也是一个物理行。

默认情况下,Python鼓励一行写一个语句的用法,这使代码更可读。

如果您想要在一个物理行列举多个逻辑行,那么您必须使用一个表示逻辑行/语句结束的分号(“;”)显式地指明。例如:i = 5 print(i)与i = 5; print(i);等效。

同样可写成:i = 5; print(i);甚至是i = 5; print(i)然而,我强烈建议你坚持在每一个物理行编写一个最大的逻辑行。这就是你永远都不要使用分号。事实上,我从未使用,甚至在python程序中从来没有见过一个分号。

这个观念是很有用的,还有一种情况:如果你有一个长代码行,你可以通过使用反斜杠把它分解为多个物理行。这是被称为显式行连接:s = '这是一个字符串。 这是字符串的继续。' print(s)输出结果为:
这是一个字符串。这是字符串的继续。

同样的,print (i)与print(i)相同。

有时有一种隐含的假设,您不需要使用一个反斜杠。在这种情况下,逻辑行有一个开始圆括号、开始方括号或开始花括号,但不是一个结束的括号。这被称为隐式连接。当我们在以后的章节--编写程序使用列表时,你可以看到它的作用。

Python缩进

在Python中的空白是重要的。实际上,在一行开始的空格是重要的。这被称为缩进。在逻辑行开头的前导空白(空格和制表符)用于确定逻辑行的缩进级别,它用于依次确定语句的分组。

这意味着一起的语句必须有相同的缩进。每一个这样的语句组被称为块。在后面的章节,我们将看到的块是何等重要的例子。

你应该记住的一件事是,错误的缩进可以产生错误。例如:i = 5 print('值是 ', i) # 错误! 注意在行的开头有一个空格 print('重复,值是 ', i)当运行它时,将会发生下面的错误:
File "whitespace.py", line 4
print('Value is ', i) # Error! Notice a single space at the start of the line
^
IndentationError: unexpected indent

请注意,这里第二行的开头有一个空格。这个错误表明:Python告诉我们程序的语法是无效的,即程序写的不正确。这意味着,你不能任意开始语句中的新块(当然,除了默认的主块,您一直已经使用的)。您可以使用新块的情况,将在后面的章节详细,如(控制流](#控制流)。

如何缩进
缩进只使用空白,用制表符使用4个空格。好的编辑器如Komodo Edit会为你自动这样做。确保你使用一致的数量的缩进空格,否则你的程序将显示错误。

静态语言程序员应注意
Python为块总是使用缩进,从来不用花括号。运行from __future__ import braces可以了解更多。

Python操作符

我们将简单地看一下操作符和它的用法。Python运算符简介运算符说明举例+ (加号)两个对象相加。3 + 5 得 8. 'a' + 'b' 得 'ab'。- (减号)给出一个数减去另一数的差;如果缺少第一个操作数,它默认为是0。-5.2 得到一个负数,50 - 24 得 26。* (乘法)给出两个数的乘积或返回重复多次的字符串。2 * 3 得 6. 'la' * 3 得到 'lalala'。** (幂)返回x的y次幂。3 ** 4 得 81 (也就是3*3*3*3)。/ (除法)用y分x(x除以y)。4 / 3 得1.3333333333333333。// (整除)得到除法的商。4 // 3 得 1。% (取模)返回除法的余数。8 % 3 得 2. -25.5 % 2.25 得 1.5。<< (向左移位)数字向左移动指定位数。(在内存中每个数字由比特或二进制数表示,例如:0和1)。2 << 2 得 8。2 用二进制表示为10,左移两位得到 1000,它表示数字8。>> (向右移位)数字向右移动指定位数。11 >> 1 得 5。11 用二进制表示为1011,向右移动1位后得到二进制101,表示数字5。& (位与)数字的位相与。5 & 3得 1。| (位或)数字的位相或。5 | 3得 7。^ (位异或)数字的位相异或。5 ^ 3 得 6。~ (位求反)x的位求反结果为-(x+1)。~5 得 -6。< (小于)返回x是否小于y。所有的比较运算符返回True或False。注意这些名字的大小写。5 <3 返回 False,而 3< 5 返回 True。
比较运算符可以任意连接:3 <5 <7 返回 True。> (大于)返回x是否大于y。5 >3返回 True。如果操作对象都是数字,它们首先转换为普通型,否则,将返回False。<= (小于等于)返回x是否小于等于y。x = 3;y = 6;x <= y 返回 True。>= (大于等于)返回x是否大于等于y。x = 4;y = 3;x >= 3 返回 True。== (等于)比较操作对象是否相等。x = 2; y = 2; x == y 返回 True。x = 'str'; y = 'stR'; x == y 返回 False。x = 'str'; y = 'str'; x == y 返回 True。!= (不等于)比较操作对象是否不相等。x = 2; y = 3; x != y 返回 True。not (逻辑非)如果 x 是 True,它返回 False。如果 x 是 False,它返回 True。x = True; not x 返回 False。and (逻辑与)如果x是False,x and y 返回 False,否则它返回y的值。x = False; y = True; x and y 返回 False,因为 x 为假。在这种情况下,Python将不计算y,因为它知道and左边表达式是 False ,这意味着整个表达式将为 False ,而不论其它值为什么。这叫做求值捷径。or (逻辑或)如果 x 为 True, 它返回真,否则它返回y的值。x = True; y = False; x or y 返回 True。求值捷径这也适用。
提示,您可以使用交互式解释器计算例子中给出的表达式。例如,为了测试表达式“2 + 3”,使用交互式Python解释器提示符:
>>> 2 + 3
5
>>> 3 * 5
15
>>>数学操作和赋值的快捷方式对一个变量进行数学操作是常见的。然后将操作的结果返回给变量,今后,对这样的表达式有一个快捷方式,你可以把:a = 2 a = a * 3写成:a = 2 a *= 3注意:将 var = var operation expression 写成 var operation= expression。

Python运算符优先级

如果你有一个如2 + 3 * 4那样的表达式,是先做加法呢,还是先做乘法?我们的中学数学告诉我们应当先做乘法——这意味着乘法运算符的优先级高于加法运算符。

下面这个表给出Python的运算符优先级,从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合)。这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上部的运算符。

下面这张表(与Python参考手册中的那个表一模一样)已经顾及了完整的需要。事实上,我建议你使用圆括号来分组运算符和操作数,以便能够明确地指出运算的先后顺序,使程序尽可能地易读。例如,2 + (3 * 4)显然比2 + 3 * 4清晰。与此同时,圆括号也应该正确使用,而不应该用得过滥(比如2 + (3 + 4))。
表1-2 运算符优先级运算符描述lambdaLambda表达式or布尔“或”and布尔“与”not x布尔“非”in,not in成员测试is,is not同一性测试<,<=,>,>=,!=,==比较|按位或^按位异或&按位与<<,>>移位+,-加法与减法*,/,%乘法、除法与取余+x,-x正负号~x按位翻转**指数x.attribute属性参考x[index]下标x[index:index]寻址段f(arguments...)函数调用(experession,...)绑定或元组显示[expression,...]列表显示{key:datum,...}字典显示'expression,...'字符串转换计算顺序默认地,运算符优先级表决定了哪个运算符在别的运算符之前计算。然而,如果你想要改变它们的计算顺序,你得使用圆括号。例如,你想要在一个表达式中让加法在乘法之前计算,那么你就得写成类似(2 + 3) * 4的样子。结合规律运算符通常由左向右结合,即具有相同优先级的运算符按照从左向右的顺序计算。例如,2 + 3 + 4被计算成(2 + 3) + 4。一些如赋值运算符那样的运算符是由右向左结合的,即a = b = c被处理为a = (b = c)。

提示: 合理使用括号增强代码的可读性,在很多场合使用括号都是一个好主意,而没用括号的话,会使程序得到错误结果,或使代码可读性降低,引起阅读者困惑。。括号在Python语言中不是必须存在的, 不过为了可读性, 使用括号总是值得的。任何维护你代码的人会感谢你, 在你再次阅读自己的代码时,你也会感谢你自己。

Python列表和元组

可以将列表和元组当成普通的“数组”,它能保存任意数量任意类型的Python 对象。和数组一样,通过从0 开始的数字索引访问元素,但是列表和元组可以存储不同类型的对象。

列表和元组有几处重要的区别。列表元素用中括号([ ])包裹,元素的个数及元素的值可以改变。元组元素用小括号(( ))包裹,不可以更改(尽管他们的内容可以)。元组可以看成是只读的列表。通过切片运算([ ] 和 [ : ])可以得到子集,这一点与字符串的使用方法一样。

>>> aList = [1, 2, 3, 4]
>>> aList
[1, 2, 3, 4]
>>> aList[0]
1
>>> aList[2:]
[3, 4]
>>> aList[:3]
[1, 2, 3]
>>> aList[1] = 5
>>> aList
[1, 5, 3, 4]

元组也可以进行切片运算,得到的结果也是元组(不能被修改):
>>> aTuple = ('robots', 77, 93, 'try')
>>> aTuple
('robots', 77, 93, 'try')
>>> aTuple[:3]
('robots', 77, 93)
>>> aTuple[1] = 5
Traceback (innermost last):
File "", line 1, in ?
TypeError: object doesn't support item assignment

关于列表和元组,这里只做简单介绍,后续章节将会进行深入探讨。

Python字典

字典是Python 中的映射数据类型,工作原理类似Perl 中的关联数组或者哈希表,由键-值(key-value)对构成。几乎所有类型的Python 对象都可以用作键,不过一般还是以数字或者字符串最为常用。

值可以是任意类型的Python 对象,字典元素用大括号({ })包裹。

如果您熟悉JSON,那么字典和JSON是类似的。

>>> aDict = {'host': 'earth'} # create dict
>>> aDict['port'] = 80 # add to dict
>>> aDict
{'host': 'earth', 'port': 80}
>>> aDict.keys()
['host', 'port']
>>> aDict['host']
'earth'
>>> for key in aDict:
... print key, aDict[key]
...
host earth
port 80

这里仅作简单介绍,后续章节将进行深入探讨。

OKAY 

你以经学会了Python 二级的所有内容。接下来要开始上难度了!!!

第一阶段

分支机构

三级内容请点击[其他]~【Python 三级】按扭进入

peddle jumper
Cookie 缓存设置
X
本网站使用 cookie 缓存为您提供更好的浏览体验。
您可以全部接受,也可以选择您愿意允许的 cookie 缓存类型。
隐私设置
在您浏览本网站时选择您希望允许的 cookie 缓存。请注意,某些 cookie 缓存无法关闭,因为没有它们,网站将无法运行。
必要的
为防止垃圾邮件,本网站在其联系表格中使用 Google Recaptcha。

本网站还可能将 cookie 缓存用于电子商务和支付系统,这对于网站正常运行至关重要。
谷歌服务
本网站使用谷歌的 cookie 缓存来存取您访问的页面和 IP 地址等数据。本网站上的谷歌服务可能包括:

- 谷歌地图
- 谷歌字体
数据驱动
本网站可能会使用 cookie 缓存来记录来访者行为、监控广告转化并创造观众,包括来自:

- 谷歌分析
- Google Ads 转化跟踪
-面书(元像素)