Python Tutorial(三):一个对Python的非正式介绍
在接下来的例子中,输入和输出将通过是否有提示符(>>>和...)来进行区分。要重做示例,当提示符出现后,你输入所有的内容都必须在提示后面。凡是不以提示符开始的行都是从解释器输出的内容。如果一行只有一个第二提示符本身,意味着你必须输入一个空行,这是用来结束一个多行命令。
这个手册里面包含许多例子,还有注释。注释在Python里面以#字符开始,直到本行结束。注释可以出现在一行的开始处,或者跟在空格和代码后面,不在字符串字面量值里面。字符串字面量值里面的#字符就是一个#字符。因为注释使代码更加清晰,并不被Python解释,当你重做这些示例时可以省略它们。
一些示例:
3.1 使用Python作为一个计算器
让我们尝试一些简单的Python命令。启动解释器并等待主提示符(>>>)。
3.1.1 数字
解释器就像一个计算器,你可以输入一个表达式,它会计算出值。表达式语法比较直白,操作符+ - * /和其它大多数语言中的一样。括号可以用来分组。例如:
注意:你可能看到的并不是这个结果。浮点数结果在不同的机器上可能不同。稍后我们将会介绍更多关于控制浮点数输出显示的内容。
为了实现整数想除,丢弃小数部分,获得整数结果,使用另一个操作符//:
等号(=)是用来把一个值赋给一个变量,然后,在下一个提示符之前没有结果显示:
一个值可以同时赋给多个变量:
变量在使用前必须定义(赋给一个值),否则出错:
操作符完全支持浮点运算,当混合类型的操作数同时出现会把整型转化为浮点型:
复数同样被支持,虚部带一个后缀j或J,带有一个非零实部的复数表示为(real+imagj),或者被创建为complex(real,imag)函数。
复数总是被表示为两个浮点数,实部和虚部,从复数z中抽出这两部分使用z.real和z.imag。
浮点型和整型的转换函数对于复数并不适用,把一个复数转换为一个实数并不是一个正确的做法。使用abs(z)获得它的数量值或z.real获得它的实部:
在交互模式,最后一个打印的表达式的值将被赋给_(下划线)。这意味着当你把Python用作桌面计算器时,在某种程度上使得继续计算变得更加容易,例如:
这个变量应该被当作只读的,不要给它显式赋值,你可以创建一个同名的本地变量遮住内建的变量和其魔力行为。
3.1.2 字符串
除了数字外,Python也可以操作字符串,有几种表示方式。可以被单引号或双引号括住:
解释器以和输入同样的方式打印出字符串操作的结果,在引号里面,包括引号和其它有趣的被反斜线转义的字符,来显示精确的值。如果一个字符串里面包含单引号但不包含双引号,那这个字符串就用双引号包括,相反就用单引号来包括。print()函数为这些输入字符串产生一个更加可读的输出结果。
字符串字面量值可以使用几种方式来横跨多行。继续行可以被使用,在行的末尾加一个反斜线来指示下一行在逻辑上是这一行的继续:
注意,新行仍然需要被嵌入到字符串中,使用\n,在行末反斜线后面的新行将被丢弃(敲回车时产生的换行符)。示例输出一下内容:
或者字符串也可以被一对匹配的三个引号包围,"""或'''(三个双引号或单引号),行结束符不需要转义,但是它们会被包含在字符串中。所以下面示例使用一个转义来避免一个不希望的初始空白行。
产生一下输出:
如果我们把字符串字面量值作为“原始”字符串,\n将不再被转化为新行,行末的反斜线,换行符都将作为数据被包含在字符串中。因此,示例:
将打印出:
字符串可以使用+来连接,*来重复:
两个相邻的字符串字面量值将自动被连接;上面示例中的第一行也可以被写成 word = 'Help' 'A';只有在两个字面量时才起作用,其它任意的字符串表达式都不行:
字符串可以通过下标进行索引,第一个字符的下标是0。没有单独的字符类型,一个字符就是长度为一的字符串。就像在图符编程语言中,子字符串可以通过切片的标记法来指定,被冒号分割的两个索引。
切片索引具有有用的默认值,第一个索引被忽略时默认为0,第二个索引被忽略时默认是字符串的长度。
Python字符串不能被改变,向一个指定索引位置赋值会导致错误:
然而,使用联合的内容创建一个字符串是简单和有效的:
这是一个有用的不变的切片操作,s[:i] + s[i:] 等于 s。
不正常的切片索引可以被很好的处理,一个索引如果太大会被替换为字符串的长度,如果上界比下界小的话返回空字符串。
索引可以是负数。这样是从右侧开始计数。例如:
但是-0其实就是0,所以它并不从右侧开始计数。
越界的负数切片索引会被截断,但是这种情况在只有一个元素(非切片)的索引时是错误的:
一种记住切片如何工作的方式是把索引当作字符里面的点,第一个字符的左边缘被标记为数字0,一个长度为n的字符串的最后一个字符的右边缘具有的索引是n,例如:
第一行的数字给出了索引0..5在字符串中的位置。第二行给出了相应的负数索引。从i到j的切片由标记为i和j边缘之间的所有字符组成。
对于非负索引,切片的长度就是索引的差值,如果它们都在边界之内。例如,word[1:3]的长度是2。
内建函数len()返回字符串长度:
3.1.3 关于Unicode
从Python3.0开始,所有的字符串都支持Unicode。
Unicode的好处就是为现在和过去的每一个脚本里面的每一个文本字符都提供一个序数。以前,对于脚本字符只有256个可能的序数。文本被界限在一个代码页,它把序数映射到脚本字符。这导致许多混乱尤其是谈到软件国际化的时候。Unicode解决了这些问题,通过为所有的脚本只定义一个代码页。
如果你想在字符串里面包含一个特殊的字符,你可以使用Python的Unicode转义编码来完成它。下面的示例显示如何做:
转义序列\u0020表示在指定位置插入一个Unicode字符,它的序数值是0x0020(空格)。
其它的字符使用它们各自的序数值直接作为Unicode序数值来进行解释。如果你有一些字符串字面量值是使用许多西方国家的Latin-1编码的,你会发现它非常方便,因为Unicode的低256个字符和Latin-1的256个字符一样。
除了这些标准编码外,Python提供了一个全部的以一个已知编码为基础创建Unicode字符串的其它方式的集合。
把字符串使用指定的编码转换为字节序列,字符串对象提供了一个encode()方法,带有一个参数,是编码的名字。编码名称最好使用小写。
3.1.4 列表
Python有许多复合数据类型,用来对其它的值进行分组。用途最多的是列表。它可以表示为写在中括号里面被逗号分割的项。列表里面的项不需要都是相同类型。
和字符串的索引一样,列表的索引从0开始,可以被切片,连接等:
所有的切片操作返回一个新的包含请求元素的列表。这意味着下面的切片返回一个列表a的浅拷贝:
字符串的值不可改变,不同的是列表的元素可以单个的改变:
也可以对一个切片进行赋值,这样可以改变列表的长度或将其整个清空:
内建的len()函数同样适用于列表:
列表可以嵌套(列表包含其它列表),例如:
可以在列表的尾部添加元素:
注意:最后一个示例中,p[1]和q引用同一个对象。
3.2 迈向编程的第一步
当然,我们可以使用Python来完成比把两个东西相加更复杂的任务。例如,我们可以初始化一个斐波那契数列。如下:
这个示例包含几个新的特性。
-
第一行包含一个多个赋值,变量a和b同时获得新值0和1。最后一行再次使用,演示了在任何一个赋值操作发生前右边的所有表达式首先被计算。右边的表达式的计算顺序是从左到右。
-
只要条件(这里是b < 10)仍然是true,while循环就执行。在Python里,就像C语言,一个非零的整数值为true,零是false。条件也可以是字符串或列表,事实上,对于任何序列,只要长度不是零就都是true,空的序列是false。示例里面的测试是一个简单的比较。标准比较操作符的写法和C里的一样,<(小于)>(大于)==(等于)<=(小于等于)>=(大于等于)!=(不等于)。
-
循环体是缩进的,缩进是Python用来分组语句的方式。在交互提示符,对于缩进行你不得不键入一个tab或几个空格。在实际操作中,你需要一个文本编辑器来准备更加复杂的输入。所有的比较好的文本编辑器都有自动缩进的功能。当一个复合的语句被交互式的输入时,必须后跟一个空行来指示完成(因为解析器无法猜测你什么时候输入最后一行)。记住,一个基本块里的每一行都必须缩进相同的数量。
-
print()函数输出传递给它的表达式的值。它不同于你希望输出表达式的方式,它处理多个表达式,浮点数,字符串。字符串输出是不带引号,但包括字符之间的空格,你可以很好的格式化字符串。像这样:
关键字end可以用来在输出之后避免产生新行,或以一个不同的字符串结束输出:
本文是对官方网站内容的翻译,原文地址:http://docs.python.org/3/tutorial/introduction.html