收藏 分享(赏)

Python教程(原文).doc

上传人:精品资料 文档编号:8440204 上传时间:2019-06-27 格式:DOC 页数:90 大小:372.50KB
下载 相关 举报
Python教程(原文).doc_第1页
第1页 / 共90页
Python教程(原文).doc_第2页
第2页 / 共90页
Python教程(原文).doc_第3页
第3页 / 共90页
Python教程(原文).doc_第4页
第4页 / 共90页
Python教程(原文).doc_第5页
第5页 / 共90页
点击查看更多>>
资源描述

1、1 前言Python是一个容易学习又功能强大的程序语言。它含有高效率的高阶数据结构,也是一个简单但是有效果的对象导向程序语言(object-oriented programming)。Python优雅的语法及动态型态识别(dynamic typing),加上直译式(intepretion)的本质,使得它成为一个在多种功能多种平台上撰写脚本(scripts)及快速开发的理想语言。 各种主要平台的Python直译器(interpreter)及延伸的标准链接库(library)都可以在 Python的网站( http:/www.python.org )上免费下载及自由流传(包含原始码及二元执行档(b

2、inary form)。 在该网站上也有许多的档案及连结,包括了免费、第三者开发的Python模块、程序及工具, 以及许多的附带文件。 Python的直译器也可以很容易的延伸,可以加入新的由C或是C+(或其它可以由C呼叫的程序语言) 所写的函数或是数据型态。 Python也很适合用来当作其它应用程序的延伸语言(译者言:比如说用Python来延伸CAD, DBMaker等的功能)。 本教学文件将非正式的介绍给读者Python语言及系统的基本观念及特性。如果读者手边有一个Python的直译器将有助于获得实际的知识,但是本文件的解释都很充足,所以如果单纯离线阅读也是可以的。 若对于标准的对象及模块有

3、兴趣的话,请参阅 Python Library Reference。 若是要知道正式Python语言的标准定义的话,可参考 Python Reference Manual 。 若有兴趣用C或C+写延伸的功能的话,请参考 Extending and Embedding the Python Interpreter 以及 Python/C API Reference。市面上也有许多更深入探讨Python的书籍。 本教学文件并不试图完整的介绍每一个Python的特性,甚至也不试图介绍每一个常用的功能。 相反的,本文件介绍许多Python值得认识的功能,并且让读者对这个语言的大致风貌有一个了解。 在读

4、完此书之后,读者应该可以开始读及写Python的模块及程序,并且应该可以开始学习各种在 Python Library Reference所介绍的模块了。2 开胃菜 如果你曾经写过大型的shell script,你大概能了解那种感觉:你想要新增加一个功能,但是这个script已经实在有够大够慢够复杂的了,或者说,你想要加入的新功能需要呼叫系统功能或是其它函数,但是这些功能/函数只有C才能呼叫。你要解决的问题好像并没有严重到要重新用C来写整个程序,或者有些问题因为要用到可变长度的字符串或是特别的数据结构(像是用排序过的文件名称组成序列(list),用C 来写实在比shell麻烦的太多,又或者是你根

5、本不是对C很熟。 另外一个情境是这样的:也许你要使用好几个C的链接库,但是标准开发C程序的过程(写/编译/测试/重新编译 )实在太花时间,你需要能快速的开发好软件。又或者你已经些好一个应用程序,这个程序可以使用一个延伸的语言来控制。你不想创造一种语言,然后还得写好这个语言的编译器,还得把这个编译器跟你的程序放在一起。 在这些情况之下,Python也许正是你所需要的语言。Python虽然简单,却是不折不扣的程序语言。对大型的程序来说,它比起shell能提供更多的结构性及支持。另外一方面,它也提供了比C语言更多的错误检查。由于Python是一个非常高阶的语言,所以它有许多内建的数据型态像是有弹性的

6、数组及字典(dictionary)等等,如果用C来做的话得花上你大半天的时间。正是因为Python有较为一般性的数据型态,Python可以应用的范围比起awk甚或是Perl要广的很多,最起码,Python跟这些语言一样容易开发。 Python的另外一个特点就是可以将程序切成小模块,然后这些模块还可以应用在其它的程序之中。Python本身也有一个相当大的标准模块库可以让你来使用,或者当作学习Python程序设计的范例。在Python中也有内建的模块可以提供许多功能,诸如:档案I/O、系统呼叫、sockets,甚至是与Tk之类的GUI工具互动的接口。 Python是一个直译式的语言,可以省掉你在开

7、发程序时不少编译及连结程序的时间。这个Python的直译器甚至可以交互式的使用,让你在写一些小程序来试验Python语言的特性,或是测试程序时可以写节省不少时间。你还可以用Python直译器来当作计算器呢。 Python让你可以写出非常精练及可读性高的程序。用Python写出的程序通常比用C或C+ 写的程序要短得多,其理由如下: 因为其高阶的数据型态,使得你可以用很简单的叙述(statement)就能够表达复杂的运作过程 Python使用缩排来代替C/C+ 中常见的前后括号 Python不需要变量或是参数的宣告 Python 是延伸性高的语言。如果你知道如何写C 语言的程序的话,你很容易就可以

8、在Python的直译器中加入新的内建函数(function)或是模块,这样做的好处是你可以让程序中关键的部分速度调到最快,或者是连结Python到binary的链接库(例如是厂商做好的图形链接库) 去。一但你真的需要,你也可以把Python直译器加入到你用C写的应用程序里面去,然后Python就变成你的应用程序的延伸或是商业化的语言了。 另外一提的是,这个程序的命名由来是源自于BBC著名的节目Monty Pythons Flying Circus,跟其它恶心的爬虫类没有任何关系。如果你的文件中要提到Monty Python的话,不但照准,而且还相当鼓励。 2.1 然后呢 现在你应该对Pytho

9、n感到有一些兴趣了吧,接下来你将看到比较多的的细节讨论。学习语言的最好途径是使用之,赶快动手吧。 在下一章我们将讨论到如何使用Python的直译器,虽然相当的普通,但是如果你要尝试一下之后的范例的话,这是重要的基础。 本教学文件的其余部分将用许多的例子介绍Python语言的各种不同的特性,先从简单的表示式(expressions)开始,将会谈到叙述(statements)及数据型态,然后是函式(functions)及模块(module) ,最后会谈到较高深的观念像是例外情形(exceptions)及使用者自订的类别(user-defined classes)等等。 3 使用Python的直译器

10、 3.1 如何启动直译器 在Unix 之类的操作系统上,如果有安装的话,Python直译器通常安装在 /usr/local/bin/python 这个目录中。你可能需要先在Shell中设定寻找 /usr/local/bin 目录,这样你才可以在Shell中打入以下的指令来启动Python直译器 python你的Python直译器安装的位置是可以在安装时设定的,因此也有可能安装在其它的地方。你也许需要问你周遭的Python大师或是系统管理员才能知道正确的安装位置( /usr/local/python 是另外一个普遍的可能安装所在)。 要离开Python直译器的话,打入EOF的字符( 在Unix上

11、是 Control-D ,在DOS及Windows 上是 Control-Z 就会使得直译器离开(zero exit status)。如果行不通的话,你可以打入以下指令离开直译器: “import sys; sys.exit()“. Python直译器使用每行编辑,应该不难使用。在Unix上,也许安装Python直译器的人有安装使用GNU readline链接库的功能,这样的话你会有交互式编辑以及编辑过去数据的功能。最简单的检查你有没有这项功能的方法就是在Python的提示之下打入Control-P ,如果有哔声的话,就表示你有这项功能,你可以翻到 附录 A 去看特殊键的用法。如果你没有听到哔

12、声,或是只出现 P 的话,就表示你没有这项功能,你得使用退格键(backspace)来清除目前所在行的字符了。 Python直译器的操作方法根Unix shell很像:当被呼叫时所连结的标准输入是tty device(终端机 )的话,直译器会互动的读及执行所输入的指令。当被呼叫时加入文件名称参数或所连结的标准输入是连到档案的话,直译器就会读入并执行该档所含有的 script 。 第三种启动直译器的方法是打入以下的指令 “python -c command arg .“ ,这个指令会执行 command 所代表的叙述(这跟shell的 -c option很像),因为Python叙述(statem

13、ent)常有空白及特殊字符,所以用此法时可以把 command 所代表的叙述用”括起来,以免跟shell的其它特殊字符或是参数有所混淆。 要注意的是 “python file“ 指令跟 “python “ 。如果是指令是延续上一行的话就会出现secondary prompt符号,这个 secondary prompt 就通常是 “. “ 。一进入python的互动模式的话直译器会出现一个欢迎信息,以及版本编号辑版权说明,接下来就是第一个prompt。如下所示: pythonPython 1.5.2b2 (#1, Feb 28 1999, 00:02:06) GCC 2.8.1 on sunos

14、5Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam当你输入需要多行的结构时,直译器就会自动会出现延续上一行的prompt符号,下面的例子是 if 叙述的情况: the_world_is_flat = 1 if the_world_is_flat:. print “Be careful not to fall off!“. Be careful not to fall off!3.2 直译器及其周边环境3.2.1 程序错误处理当有错误产生时,直译器就会在屏幕印出错误的信息以及stack trace的所有数据。在互动模式之下

15、,印完数据之后会再印出prompt来。如果输入是来自于档案的话,在出现错误的情况下直译器在印出stack trace之后程序会以nonzero exit 的状态结束。 (此处讨论不包含已经由 try 叙述及 except 子句处理外的状况(Exceptions)。有些的程序错误是没有办法挽救并且会造成nonzero exit的结束情况,这常常是内部的不一致或是某种running out of memory所造成。所有的错误信息都会被写入至标准error stream之中,正常的程序执行的输出则会写入到标准(standard output)输出之中。 如果在primary 或是secondary

16、 prompte之下打入中断字符(通常是 Control-C 或是 DEL),这会造成输入的中断并且会回到prompt之下。 (有一个GNU Readline package的问题可能会使这个功能失效。) 在指令执行之中打入中断字符则会引起 KeyboardInterrupt 的exception ,而这是可以在 try 叙述中处理的。 3.2.2 执行Python脚本在BSD之类的Unix 系统上,我们可以在script的最前面加入以下的叙述(类似shell script),并改变档案属性为可执行: #! /usr/bin/env python如此script就会变成可执行档,可以直接执行

17、(假设Python的直译器是在user的 $PATH) 变量之中) 。 “#!“ 这两个字必须在script档案的最前面。值得一提的是 “#“ 在Python之中也当作注解(comment)部分开始的符号。 3.2.3 交互式启动档当你使用互动模式的时候,如果可以在每次直译器要启动时先执行一些命令的话将是很有用的。要达成如此功能,你可以设定一个文件名称给环境变量 $PYTHONSTARTUP ,这个档案可以包含你想要在启动时执行的命令,类似 .profile 在 Unix shell中的用法。 这个启动档(startup file)只有对在互动模式下有效,如果你用Python读入script时

18、就没有用,在当 /dev/tty 是命令的输入来源也没有用(其它的情况与互动模式相类似)。这个startup file所执行命令的命名空间是与其它互动模式下输入的指令相同,所以在startup file内定义或是import的对象,在之后的互动模式指令中都是可以直接使用的。你也可以在这个startup file中改变 sys.ps1 及 sys.ps2 ,如此就可以改变你的primary prompt及secondary prompt。 如果你在你的startup file中想要使用另外的在目前目录的 startup file,你只需要在主要startup file (global start

19、-up file)写入 “if os.path.isfile(.pythonrc.py): execfile(.pythonrc.py)“ 。如果你想要在你的script之中使用startup file的话,你必须在你的script中写入: import osfilename = os.environ.get(PYTHONSTARTUP)if filename and os.path.isfile(filename):execfile(filename)4 非正式的Python介绍 在底下的例子里,你可以很容易区别凡是需要输入的地方都会出现prompts (“ “ 或 “. “),凡是输出的结

20、果则没有。如果你想要跟着这个教学文件一起做的话,你就得打入所有在prompts之后的指令,凡是没有prompts出现的行就是直译器输出的结果。值得注意的是,secondary promt 之后如果什么东西都没有,表示这是一个空行(直接按ENTER的结果),也表示这是一个多行指令的结束。 在本文件中的大部分例子,都有加上注释,甚至是那些互动模式下的例子。注释(comment)在Python中是以 “ #“ 之后的东西都是注释(译:跟Perl一样)。注释可以自成一行,也可以跟在空格符或是程序代码的后面。但是,如果 “ #“ 是在字符串常数(string literal)之中的话,就不代表注释的意义

21、,而只是一个普通字符罢了。 底下是一些例子: # this is the first commentSPAM = 1 # and this is the second comment# . and now a third!STRING = “# This is not a comment.“4.1 把Python当作计算器来用 现在我们来试一试一些简单的Python指令吧。请先启动Python的直译器并且等待primary prompt( “ “ )的出现。( 应该不会很久的)4.1.1 数字 直译器就好像一个计算器一样:你可以打入一个表示式(expression),然后直译器会把这个expr

22、ession的执行结果秀出来。Expression的语法都很简单直接,一般的运算符号 +, -, * 以及 / 的用法就跟其它的程序语言(像是Pascal或C)一样。你也可以用括号 “( )“ 来表示运算执行的先后次序。例子如下: 2+24 # This is a comment. 2+24 2+2 # and a comment on the same line as code4 (50-5*6)/45 # Integer division returns the floor:. 7/32 7/-3-3跟C语言一样,等于符号 (“=“) 其实是表示设定某个值给一个变量的意思。虽然设定 (“=

23、“) 运算本身是有结果值的,但是直译器并不会输出其结果来。 width = 20 height = 5*9 width * height900一个值是可以同时设给许多变量的: x = y = z = 0 # Zero x, y and z x0 y0 z0浮点数的运算在Python里面也是支持的,如果整数与浮点数(带小数点或e的数)进行运算的话,整数部分会先转换(convert)成浮点数再进行运算。 4 * 2.5 / 3.33.0303030303 7.0 / 23.5甚至连复数的运算也支持喔,只需要把虚数部分加上 “j“ 或是 “ J“在其后就可以了。如果实部不为零的话,复数的写法就写成

24、“(real+ imagj)“ 。或者,我们也可以用函数的方式来表示复数为 “complex(real , imag)“ 的形式。 1j * 1J(-1+0j) 1j * complex(0,1)(-1+0j) 3+1j*3(3+3j) (3+1j)*3(9+3j) (1+2j)/(1+1j)(1.5+0.5j)复数的虚数部分及实数部分的值都是以浮点数(float point numbers)来表示的,如果 z 代表一个复数的话,你可以很轻易的用 z.real 以及 z.imag 得到一个复数的实数部分及虚数部分。 a=1.5+0.5j a.real1.5 a.imag0.5复数没有办法直接用

25、 (float(), int() 或是 long() 转换成浮点数或是整数。事实上,复数没有直接对应的实数,你必须用 abs(z) 来得到 z 的magnitude( 以浮点数表示 ),或是如上所述用z.real 直接得到其实数部分。 a=1.5+0.5j float(a)Traceback (innermost last):File “, line 1, in ?TypeError: cant convert complex to float; use e.g. abs(z) a.real1.5 abs(a)1.58113883008在互动模式之下,最后一个印出来的expression的值会

26、储存在一个特殊变量 “_ “ 之中。这表示,当你用Python的直译器来当作计算器用的时候,想要连续做运算其实是方便许多的。如下例: tax = 17.5 / 100 price = 3.50 price * tax0.61249999999999993 price + _4.1124999999999998 round(_, 2)4.1100000000000003对于使用者来说, “_“ 这个变数是一个只读的变数。你没有办法设定一个值给它,当你这样做的时候,事实上你是重新创造一个同名的变量,但是跟之前系统内建的 “_“ 这个变量是一点关系也没有的了。4.1.2 字符串 除了数字之外, Py

27、thon也有能力处理字符串(string)。字符串在Python中有很多种表达方式,它可以放在双括号”之中,也可以放在单括号里面: spam eggsspam eggs doesnt“doesnt“ “doesnt“doesnt“ “Yes,“ he said.“Yes,“ he said. “Yes,“ he said.“Yes,“ he said. “Isnt,“ she said.“Isnt,“ she said.字符串常数(string literals)是可以跨越多行的,其表示方法有很多。如果要换行的话可以用”符号来表示之。如下例: hello = “This is a rather

28、 long string containingnseveral lines of text just as you would do in C.nNote that whitespace at the beginning of the line issignificant.n“print hello这个例子会印出以下的结果: This is a rather long string containingseveral lines of text just as you would do in C.Note that whitespace at the beginning of the line

29、 is significant.你也可以用成对的三个单引号( “ ) 或双引号 ( ) 来表示字符串。在此情况下你所打入的ENTER就会直接被解读为换行符号而不需要再用n了。print “Usage: thingy OPTIONS-h Display this usage message-H hostname Hostname to connect to“这个例子会印出以下的结果: Usage: thingy OPTIONS-h Display this usage message-H hostname Hostname to connect to如果你打入的expression 是字符串的运

30、算,运算的结果的同样的会由直译器显示出来,而且显示的方式跟你直接打入字符串常数(string literals)是一样的:会在引号之中,所有有escape character “”表示的字符都会依样的显示出来。如果字符串本身包含有单引号,整个字符串就会用双引号括起来,要不然就会只用单引号来把整个字符串括起来。(如果你使用 print 这个叙述(statement)来印出字符串的话,屏幕的输出就不会有引号出现,而且字符串中的escape character (”表示的特殊字符) 都会显示出其所代表的意义来。) 字符串可以用 + 这个操作数来相加 (连接起来) ,或是用 * 这个操作数来重复之。请

31、看例子: word = Help + A wordHelpA 如果你把两个字符串常数放在一起,它们自动就会相加起来。所以,上面的例子的第一行也可以写作 “word = Help A“ 。不过这个方法只适用于两个字符串常数的相加,其它情况就不适合了。请看例子: import string str ing # string.strip(str) + ing # string.strip(str) ing # “, line 1string.strip(str) ingSyntaxError: invalid syntax如同在C语言一样,字符串是有标记(subscript(index)的,第一个字

32、符的标记(subscript(index)就是0。在Python中没有另外一个字符character数据型态,一个字符就是一个长度为 1的字符串。就像是在Icon语言一样,字符串是可以用其subscript(index) 来切出 ( slice notation )其中的一部份的,其语法为 “。 word4A word0:2He word2:4lp与C不同的是,Python的字符串是不可改变的(immutable),如果你想要改变其中的一个字符或是一个部份(slice),你会得到一个错误的信息: word0 = xTraceback (innermost last):File “, line

33、1, in ?TypeError: object doesnt support item assignment word:-1 = SplatTraceback (innermost last):File “, line 1, in ?TypeError: object doesnt support slice assignment但是你可以任意使用一个字符串的一个字符或是一个部份(slice)来创造出另一个字符串,这是完全可行的: x + word1:xelpA Splat + word-1:SplatA当你用字符串切片(string slice)的语法时,可以使用其预定(default)的

34、subscript(index)值,这是很方便的。第一个 subscript(index)的默认值是0,第二个 subscript(index)的默认值则是这个字符串的整体长度。 word:2 # The first two charactersHe word2: # All but the first two characterslpA所以, s:i + si: 会恰好等于 s 。你可以想一想为什么: word:2 + word2:HelpA word:3 + word3:HelpA如果你用一些奇怪的index来切割字符串,Python直译器也都处理的很好:如果第二个index太大的话就自动

35、代换为字符串的长度,如果第二个index比第一个index 还要小的话就自动传回一个空字符串。 word1:100elpA word10: word2:1字符串的index甚至可以是负数,若是负数的话,就必须从字符串的尾巴开始算起。如下例: word-1 # The last characterA word-2 # The last-but-one characterp word-2: # The last two characterspA word:-2 # All but the last two charactersHel但是 -0 事实上是等于 0 ,所以不会从尾巴开始算起。 word

36、-0 # (since -0 equals 0)H如果负数index超过字符串的范围的话,就自动只会到最大可能的范围,但是如果不是切割一部份的话就会造成错误的情形: word-100:HelpA word-10 # errorTraceback (innermost last):File “, line 1IndexError: string index out of range最好避免错误的方法是把index看成是指向字符及字符间位置的指针,字符串的最开头是0,字符串的结尾处就是字符串的长度。如下图所示: +-+-+-+-+-+| H | e | l | p | A | +-+-+-+-+-

37、+ 0 1 2 3 4 5 -5 -4 -3 -2 -1上图的数字部分第一行代表的是正数的index,由0到字符串的长度,第二行代表的是负数的index。字符串的切片(slice)很容易就可以看出来,就是两个index 之间的所有字符组合成的字符串啰。 对于正数的index来说,如果两个index 都在范围之内,字符串的切片(slice)的长度就正好是其两个index相减的结果。举例来说 word1:3 的长度就正好是 2。 Python内建的 len() 函式可以帮助我们得到字符串的长度值。 s = supercalifragilisticexpialidocious len(s)344.1

38、.3 Unicode字符串 从Python 2.0 开始Python支持一种新的储存文字数据的数据型态:Unicode物件 (object)。使用这个对象你可以储存并控制Unicode的资料(详见 http:/www.unicode.org ) ,并且这个对象跟已经存在的字符串(string)对象是完全可以互相整合,并且在需要时可以互相转换的。 使用Unicode 的好处是可以处理各种不同国家语言的字符。在Unicode之前,在一个code page里只有256个字符可以使用在script中。这个限制的结果常常造成软件国际化(internationalizetion,通常写作 “i18n“ -

39、 “i“ + 18个字符 + “n“)时候的困扰。Unicode的出现定义一个所有script都可以用的code page,如此就解决了这个问题。 在Python中要创造一个Unicode字符串就跟创造一个普通字符串一样容易: uHello World !uHello World !在引号之前小写的 “u“ 代表这个字符串是一个Unicode字符串。如果你要用到特殊字符,你可能要使用Python的Unicode特殊字符编码( Unicode-Escape encoding)。底下的范例示范如何使用之: uHellou0020World !uHello World !上面的u0020 表示在这个

40、位置要插入一个由十六位0x0020所代表的Unicode字符 (就是空格符啦 )。 其它的字符也是一样的会被解读为其对应的Unicode字符。由于Unicode对应中的前256 个Unicode 字符正好就是大部分欧美国家使用的Latin-1 编码字符,所以其转换是更加的容易。 对于专家们来说,有一个字符串的原始模式(raw mode)可以使用。你必须再加上一个小写 r 来使Python 使用这一个原始的Unicode特殊字符编码( Raw-Unicode-Escape encoding)。只有当uXXXX 之中的小写 r 有奇数的时才会用到这一个编码的。 urHellou0020World

41、!uHello World ! urHellou0020World !uHellou0020World !这个原始模式(raw mode)通常用在当你的字符串里面有一大堆的反斜线 时 ,例如regular expressions(正规表示)时就常用到。 除了这些标准的编码之外, Python还提供了一整套的方法让你可以从以知的编码中创造出Unicode 字符串来。 Python内建的 unicode() p() 函式可以让你使用所有的已注册的Unicode译码 /编码系统(codecs (COders and DECoders)。 这个 codes 可以与大部分的系统互相转换,包括 Latin

42、-1, ASCII , UTF-8 以及 UTF-16 等等。上面所提到的最后两种系统是可变长度的编码系统,可以来储存8位及 16位的Unicode字符。Python预设使用 UTF-8为预设编码系统。当你印出Unicode 或是将Unicode 写入档案时都会使用到。 u“?“u344366374 str(u“?“)303244303266303274如果你要使用一个特别的编码系统,但是要印出对应的Unicode码时,你可以使用 unicode() 函式,加上这个编码系统的名称当作第二个参数。 unicode(303244303266303274,UTF-8)u344366374如果要把Un

43、icode 字符串转换为一般的字符串编码时,可以使用Unicode对象的 encode() 方法(method)。 u“?“.encode(UTF-8)3032443032663032744.1.4 列(List) (译:硬要翻译list 实在太不方便,我直接用原文啰) Python能够了解一些较为 复杂 的数据型态,这些数据型态大多是用来处理一群的其它数据值。最方便使用的要算是 list 了,一个list可以写成一串由逗号分开的值(东西) ,然后用角括号括起来便成。放在list里的东西不需要是同一个数据型态 a = spam, eggs, 100, 1234 aspam, eggs, 100

44、, 1234跟字符串的index用法相同,list的index也由0开始,同样你可以用index来切割lists 、组合两个 list等等: a0spam a31234 a-2100 a1:-1eggs, 100 a:2 + bacon, 2*2spam, eggs, bacon, 4 3*a:3 + Boe!spam, eggs, 100, spam, eggs, 100, spam, eggs, 100, Boe!与字符串不相同的是,字符串的个别字符是不可变动的( immutable ),但是list 的个别成员是可以自由改变的。 aspam, eggs, 100, 1234 a2 = a

45、2 + 23 aspam, eggs, 123, 1234你也可以设定一个值或是一个list给一个list 的切割部分 (slice),但是这样的结果会改变整个list的长度: # Replace some items:. a0:2 = 1, 12 a1, 12, 123, 1234 # Remove some:. a0:2 = a123, 1234 # Insert some:. a1:1 = bletch, xyzzy a123, bletch, xyzzy, 1234 a:0 = a # Insert (a copy of) itself at the beginning a123, b

46、letch, xyzzy, 1234, 123, bletch, xyzzy, 1234内建的 len() 函式仍然可用在list上面: len(a)8一个list 也可以是另一个 list的成员(这叫作巢状list, nested list),参考下例: q = 2, 3 p = 1, q, 4 len(p)3 p12, 3 p102 p1.append(xtra) # See section 5.1 p1, 2, 3, xtra, 4 q2, 3, xtra注意前一个例子, p1 以及 q 事实上指得是同一个对象。我们在之后还会再讨论对象的语法( object semantics )。 4

47、.2 迈向程序设计的第一步 当然Python能做比二加二更有用更复杂的事,例如说,我们可以写一个程序来印出费氏数列( the Fibonacci series )来: # Fibonacci series:. # the sum of two elements defines the next. a, b = 0, 1 while b (大于), = (等于), = (大于或等于) 以及 != (不等于)。 在循环中的执行部分是 缩排 的:缩排在Python中是表示一群叙述的方法(way of grouping statements)。Python没有(还没有)提供够聪明的行排版机制,所以每个

48、要缩排的行你都得打入空格键或是tab键来缩排。实际的工作环境中,你也许会有自己的文字编辑器,大部分的编辑器会自动帮你做缩排的工作。当在互动模式下输入一个复合的statement时(一个由许多statements组合成的statement),最后你需要再打入一个空白行(译:按 ENTER键)来告诉直译器这个statement 已经完成了(直译器没办法猜你什么时候完成这个statement) 。值得注意的是,如果你的statement是属于同一群(block)的话,你缩排的距离就要是一样的。 print 这个叙述会印出一个expression 的结果值,这点与我们之前所做的仅仅打入expression 是不同的。不同之处在于对字符串及多个的expression来

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报