首页 Python自学笔记

Python自学笔记

举报
开通vip

Python自学笔记Python自学笔记 Python学习笔记 , 在下面的例子中,我们把一个字符串赋值给变量myString,先用print 来显示 变量的内容,之后用变量名称来显示。 >>> myString = 'Hello World!' >>> print myString Hello World! >>> myString 'Hello World!' , 程序输入: 下划线(_)在解释器中有特别的含义,表示最后一个表达式的值。所以上面的代码执行 之后,下划线变量会包含字符串: >>> _ Hello ...

Python自学笔记
Python自学笔记 Python学习笔记 , 在下面的例子中,我们把一个字符串赋值给变量myString,先用print 来显示 变量的内容,之后用变量名称来显示。 >>> myString = 'Hello World!' >>> print myString Hello World! >>> myString 'Hello World!' , 程序输入: 下划线(_)在解释器中有特别的含义,表示最后一个表达式的值。所以上面的代码执行 之后,下划线变量会包含字符串: >>> _ Hello World! Python 的print 语句,与字符串格式运算符( % )结合使用,可实现字符串替换功能,这 一点和 C 语言中的printf()函数非常相似: >>> print "%s is number %d!" % ("Python", 1) Python is number 1! %s 表示由一个字符串来替换,而%d 表示由一个整数来替换,另外一个很常用的就 是%f, 它表示由一个浮点数来替换。 , 在学习 Python 的过程中,如果需要得到一个生疏函数的帮助,只需要对它调用内建函 数help()。通过用函数名作为 help()的参数就能得到相应的帮助信息: >>> help(raw_input) Help on built-in function raw_input in module __builtin__: , 注释: 和大部分脚本及Unix-shell 语言一样,Python 也使用 # 符号标示注释,从 # 开始, 直到一行结束的内容都是注释。 >>> # one comment , 运算符: 和其他绝大多数的语言一样,Python 中的标准算术运算符以你熟悉的方式工作 + - * / // % **,加、减、乘、除和取余都是标准运算符。双星号(**)是乘方运算符。 , Python 有两种除法运算符: 单斜杠用作传统除法,双斜杠用作浮点除法(对结果进行四舍五入)。 传统除法是指如果两个操作数都是整数的话,它将执行是地板除(取比商小的最大整数),而浮点除法是真正的除法,不管操作数是什么类型,浮点除法总是执行真正的除法。 , 运算符优先级: >>> print -2 * 4 + 3 ** 2 + 和 , 优先级最低, *, /, //, %优先级较高, 单目运算符 + 和 - 优先级更高, 乘方的优先级最高。 (3 ** 2) 首先求值, 然后是 (-2 * 4), 然后是对两个结果进行求和。 , 比较运算符(关系运算符): Python 当然也有标准比较运算符, 比较运算根据表达式的值的真假返回布尔值: < <= > >= == != <>(该运算符慢慢地被淘汰了,推荐使用前者) , Python 也提供了逻辑运算符: and or not 使用逻辑运算符可以将任意表达式连接在一起,并得到一个布尔值: >>> 2 < 4 and 2 == 4 False >>> 2 > 4 or 2 < 4 True >>> not 6.2 <= 6 True >>> 3 < 4 < 5 True 最后一个例子在其他语言中通常是不合法的,不过Python 支持这样的表达式, 既简洁又优美。它实际上是下面表达式的缩写: >>> 3 < 4 and 4 < 5 , 注意使用括号:合理使用括号增强代码的可读性,在很多场合使用括号都是一个好主意,而没用括号的话,会使程序得到错误结果,或使代码可读性降低,引起阅读者困惑。括号在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 上面是五个变量赋值的例子。第一个是整数赋值,第二个是浮点数赋值,第三个是字符串赋值,第四个是对一个整数增1, 最后一个是浮点乘法赋值。 , 看下面的例子: n = n * 10 将上面的例子改成增量赋值方式就是: n *= 10 , 数字类型: Python 支持五种基本数字类型,其中有二种是整数类型。 , int (有符号整数) , long (长整数) 数值大小取决于机器字长 从Python2.3 开始,再也不会报整型溢出错误, 结果会自动的被转换为长整数。 , bool (布尔值) , float (浮点值) , complex (复数) , 字符串: Python 中字符串被定义为引号之间的字符集合。Python 支持使用成对的单引号或双引号,三引号(三个连续的单引号或者双引号)可以用来包含特殊字符。使用索引运算符( [ ] )和切片运算符( [ : ] )可以得到子字符串。 字符串有其特有的索引规则:第一个字符的索引是 0,最后一个字符的索引是 ,1,加号( + )用于字符串连接运算,星号( * )则用于字符串重复。 , 下面是几个例子: >>> pystr = 'Python' >>> iscool = 'is cool!' >>> pystr[0] 'P' >>> pystr[2:5] 'tho' >>> iscool[:2] 'is' >>> iscool[3:] 'cool!' >>> iscool[-1] '!' >>> pystr + iscool 'Pythonis cool!' >>> pystr + ' ' + iscool 'Python is cool!' >>> pystr * 2 'PythonPython' >>> '-' * 20 '--------------------' >>> pystr = '''python ... is cool''' >>> pystr 'python\nis cool' >>> print pystr python is cool >>> , 列表和元组: 可以将列表和元组当成普通的“数组”,它能保存任意数量任意类型的Python 对象。 列表元素用中括号( [ ])包裹,元素的个数及元素的值可以改变。 元组元素用小括号(( ))包裹,不可以更改(尽管他们的内容可以)。元组可以看成是 只读的列表。通过切片运算( [ ] 和 [ : ] )可以得到子集,这一点与字符串的使用方法一 样。 , 列表例子: >>> 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 , 代码块及缩进对齐: 代码块通过缩进对齐表达代码逻辑而不是使用大括号,因为没有了额外的字符,程序的 可读性更高。而且缩进完全能够清楚地表达一个语句属于哪个代码块。 , 标准if 条件语句的语法如下: , if expression: if_suite 如果表达式的值非0 或者为布尔值True, 则代码组 if_suite 被执行; 否则就去执行下 一条语句。 , if expression: if_suite else: else_suite , if expression1: if_suite elif expression2: elif_suite else: else_suite 代码组是一个Python 术语, 它由一条或多条语句组成,表示一个子代码块。 , while 循环: 标准while 条件循环语句的语法类似if , 要使用缩进来分隔每个子代码块。 标准语法如下: while expression: while_suite 语句 while_suite 会被连续不断的循环执行, 直到表达式的值变成 0 或 False; 接着 Python 会执行下一句代码。 , while 循环例子: >>> counter = 0 >>> while counter < 3: ... print 'loop #%d' % (counter) ... counter += 1 loop #0 loop #1 loop #2 , for循环语句例子: , >>> for item in ['e-mail', 'net-surfing', 'homework','chat']: ... print item ... e-mail net-surfing homework chat , >>> for eachNum in [0, 1, 2]: ... print eachNum ... 0 1 2 , Python 提供了一个range()内建函数来生成这种列表。它正好能满足我们的需要, 接受一个数值范围, 生成一个列表。 >>> for eachNum in range(3): ... print eachNum ... 0 1 2 , 对字符串来说, 很容易迭代每一个字符。 >>> foo = 'abc' >>> for c in foo: ... print c ... a b c , range()函数经常和len()函数一起用于字符串索引。 在这里我们要显示每一个元素 及其索引值: >>> foo = 'abc' >>> for i in range(len(foo)): ... print foo[i], '(%d)' % i ... a (0) b (1) c (2) , 使用一个for 循环将所有值放到一个列表当中: >>> squared = [x ** 2 for x in range(4)] >>> for i in squared: ... print i 0 1 4 9 , 文件和内建函数open() 、file() open函数的标准格式: handle = open(file_name, access_mode = 'r') file_name 变量包含我们希望打开的文件的字符串名字, access_mode 中 'r' 表示读取, 'w' 表示写入, 'a' 表示添加。 其它可能用到的标声还有 '+' 表示读写, 'b'表示二进制访问. 如果未提供 access_mode , 默认值为 'r'。 如果 open() 成功, 一个文件对象句柄会被返回。所有后续的文件操作都必须通过此文件句柄进行。 当一个文件对象返回之后, 我们就可以访问它的一些方法, 比如 readlines() 和close().文件对象的方法。 , 访问对象的属性: 使用句点属性标识法, 也就是说在对象名和属性名之间加一个句点: object.attribute , 读入文件内容的例子: 下面有一些代码, 提示用户输入文件名, 然后打开一个文件, 并显示它的内容到屏幕上: filename = raw_input('Enter file name: ') fobj = open(filename, 'r') for eachLine in fobj: print eachLine, fobj.close() 我们的代码没有用循环一次取一行显示,我们一次读入文件的所有行,然后关闭文件, 再迭代每一行输出。这样写代码的好处是能够快速完整的访问文件。内容输出和文件访问不必交替进行。需要注意的一点是文件的大小。 上面的代码适用于文件大小适中的文件。对于很大的文件来说, 上面的代码会占用太多的内存, 这时你最好一次读一行。 , 错误与异常: 要给你的代码添加错误检测及异常处理, 只要将它们封装在 try-except 语句当中。 try 之后的代码组, 就是你打算管理的代码。 except 之后的代码组, 则是你处理错误的代码。如: try: filename = raw_input('Enter file name: ') fobj = open(filename, 'r') for eachLine in fobj: print eachLine, fobj.close() except IOError, e: print 'file open error:', e , 函数 类似其它的语言, Python 中的函数使用小括号( () )调用。 函数在调用之前必须先定义。 如果函数中没有 return 语句, 就会自动返回 None 对象。 , 函数定义的标准格式: def function_name([arguments]): "optional documentation string" function_suite 定义一个函数的语法由 def 关键字及紧随其后的函数名再加上该函数需要的几个参数组成。函数参数(比较上面例子中的arguments)是可选的, 这也是为什么把它们放到中括号中的原因。 如:def addMe2Me(x): 'apply + operation to argument' return (x + x) 调用函数: >>> addMe2Me(4.25) 8.5 >>> >>> addMe2Me(10) 20 >>> >>> addMe2Me('Python') 'PythonPython' >>> >>> addMe2Me([-1, 'abc']) [-1, 'abc', -1, 'abc'] , 默认参数: 函数的参数可以有一个默认值, 如果提供有默认值,在函数定义中, 参数以赋值语句的形式提供,它表示函数调用时如果没有提供这个参数, 它就取这个值做为默认值。 >>> def foo(debug=True): ... 'determine if in debug mode with default argument' ... if debug: ... print 'in debug mode' ... print 'done' ... >>> foo() in debug mode done >>> foo(False) done , 模块: 模块是一种组织形式, 它将彼此有关系的Python 代码组织到一个个独立文件当中。模块可以包含可执行代码, 函数和类或者这些东西的组合。 Python 源文件,模块的名字就是不带 .py 后缀的文件名。 , 一个模块创建之后, 你可以从另一个模块中使用 import 语句导入这个模块来使用。 导入模块: import module_name , 使用 sys(系统) 模块中的输出函数。 >>> import sys >>> sys.stdout.write('Hello World!\n') Hello World! >>> sys.platform 'win32' >>> sys.version '2.4.2 (#67, Sep 28 2005, 10:51:12) [MSC v.1310 32 bit(Intel)]' 这些代码的输出与我们使用 print 语句完全相同。 唯一的区别在于这次调用了标准输出的 write()方法,而且这次需要显式的在字符串中提供换行字符, 不同于print 语句, write()不会自动在字符串后面添加换行符号。 , 对新Python 程序员有用的内建函数: 函数 描述 dir([obj]) 显示对象的属性,如果没有提供参数, 则显示全局变量的名字 help([obj]) 以一种整齐美观的形式 显示对象的文档字符串, 如果没有提供任何参数, 则会进入交互式帮助。 int(obj) 将一个对象转换为整数。 len(obj) 返回对象的长度。 open(fn, mode) 以 mode('r' = 读, 'w'= 写)方式打开一个文件名为 fn 的文件 range([[start,]stop[,step]) 返回一个整数列表。起始值为 start, 结束值为 stop - 1; start 默认值为 0, step默认值为1。 raw_input(str) 等待用户输入一个字符串, 可以提供一个可选的参数 str 用作提示信 息。 str(obj) 将一个对象转换为字符串。 type(obj) 返回对象的类型(返回值本身是一个type 对象~)。 , 语句和语法: Python 语句中有一些基本规则和特殊字符: , 井号(#)表示之后的字符为 Python 注释 , 换行 (\n) 是标准的行分隔符(通常一个语句一行) , 反斜线 ( \ ) 继续上一行 , 分号 ( ; )将两个语句连接在一行中 , 冒号 ( : ) 将代码块的头和体分开 , 语句(代码块)用缩进块的方式体现 , 不同的缩进深度分隔不同的代码块 , Python 文件以模块的形式组织 , 继续( \ ) , 一行过长的语句可以使用反斜杠( \ ) 分解成几行,如下例: # check conditions if (weather_is_hot == 1) and \ (shark_warnings == 0): send_goto_beach_mesg_to_pager() , 有两种例外情况一个语句不使用反斜线也可以跨行。在使用闭合操作符时,单一语 句可以跨多行,例如:在含有小括号、中括号、花括号时可以多行书写。 , 另外就是三引号包括下的字符串也可以跨行书写。如下例: # display a string with triple quotes print'''hi there, this is a long message for you that goes over multiple lines... you will find out soon that triple quotes in Python allows this kind of fun! it is like a day on the beach!''' # set some variables go_surf, get_a_tan_while, boat_size, toll_money = (1,'windsurfing', 40.0, -2.00) 如果要在使用反斜线换行和使用括号元素换行作一个选择,我们推荐使用括号,这样可读性会更好。 , 多个语句构成代码组(:): 缩进相同的一组语句构成一个代码块,我们称之代码组。像if、while、def 和class 这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。我们将首行及后面的代码组称为一个子句(clause)。 代码的层次关系是通过同样深度的空格或制表符缩进体现的。同一代码组的代码行必须严格左对齐(左边有同样多的空格或同样多的制表符),建议缩进四个空格宽度,避免使用制表符。如果不严格遵守这个规则,同一组的代码就可能被当成另一个组,甚至会导致语法错误。 , 同一行书写多个语句(;) 分号( ; )允许你将多个语句写在同一行上,语句之间用分号隔开,而这些语句也不能在这行开始一个新的代码块。这里有一个例子: import sys; x = 'foo'; sys.stdout.write(x + '\n') 必须指出一点, 同一行上书写多个语句会大大降低代码的可读性,Python 虽然允许但不提倡你这么做。 , 增量赋值: 增量赋值通过使用赋值运算符,将数学运算隐藏在赋值过程当中。如果您用过C、C++或者Java,会觉得下面的运算符很熟悉。 += -= *= /= %= **= <<= >>= &= ^= |= , 增量赋值的几个例子: >>> m = 12 >>> m %= 7 >>> m 5 >>> m **= 2 >>> m 25 >>> aList = [123, 'xyz'] >>> aList += [45.6e7] >>> aList [123, 'xyz', 456000000.0] , 多重赋值: >>> x = y = z = 1 >>> x 1 >>> y 1 >>> z 1 , 另一种将多个变量同时赋值的方法我们称为多元赋值(multuple),为采用这种方式赋值 时, 等号两边的对象都是元组。 >>> x, y, z = 1, 2, 'a string' >>> x 1 >>> y 2 >>> z 'a string' 我们建议总是加上圆括号以使得你的代码有更高的可读性。>>> (x, y, z) = (1, 2, 'a string') , Python 的多元赋值方式可以实现无需中间变量交换两个变量的值。 # swapping variables in Python >>> x, y = 1, 2 >>> x 1 >>> y 2 >>> x, y = y, x >>> x 2 >>> y 1 , 合法的Python 标识符 , 第一个字符必须是字母或下划线(_) , 剩下的字符可以是字母和数字或下划线 , 大小写敏感 , 避免用下划线作为变量名的开始: 因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员 避免用下划线作为变量名的开始。 , 只有一个模块,也就是包含主程序的模块会被直接执行,或由用户通过命令行执行,或作为批处理执行,绝大部分的模块创建的目的是为了被别人调用而不是作为独立执行的脚本。 换言之: 如果模块是被导入, __name__ 的值为模块名字; 如果模块是被直接执行, __name__ 的值为 '__main__' 。 , 内存管理 Python内存管理的特点(对象的类型和内存占用都是运行时确定的): , 变量无须事先声明 , 变量无须指定类型 , 程序员不用关心内存管理 , 变量名会被“回收” , del 语句能够直接释放资源 在创建变量或对象时——也就是赋值时,解释器会根据语法和右侧的操作数来决定新对象的类型。在对象创建后,一个该对象的应用会被赋值给左侧的变量。 , 各种数据类型的0值: 0 (整型)、 0.0(浮点型)、 0L (长整型)、 0.0+0.0j (复数)、 "" (空字符串)、 [] (空列表)、 () (空元组)、 {} (空字典) , 步进切片允许利用第三个切片元素进行步进切片,它的语法为: sequence[起始索引 : 结束索引 : 步进值]。 切片操作符 ( [], [:], [::] )的三种形式: 切片对象也可以由内建函数 slice()来生成。 几个步进切片例子: >>> foostr = 'abcde' >>> foostr[::-1] 'edcba' >>> foostr[::-2] 'eca' >>> foolist = [123, 'xba', 342.23, 'abc'] >>> foolist[::-1] ['abc', 342.23, 'xba', 123] 序列切片操作: sequence[0:3]或者sequence[:3]都可以。 , 对象的比较: 比较运算符用来判断同类型对象是否相等,所有的内建类型均支持比较运算,比较运算 返回布尔值 True 或 False。如: >>> 2 == 2 True >>> 2.46 <= 8.33 True >>> 5+4j >= 2-3j True >>> 'abc' == 'xyz' False >>> 'abc' > 'xyz' False , 不同于很多其它语言,多个比较操作可以在同一行上进行,求值顺序为从左到右。 >>> 3 < 4 < 7 # same as ( 3 < 4 ) and ( 4 < 7 ) True >>> 4 > 3 == 3 # same as ( 4 > 3 ) and ( 3 == 3 ) True >>> 4 < 3 < 5 != 2 < 7 False 其实这个表达式本质上是由多个隐式的 and 连接起来的多个表达式。 , 很有趣的python缓存现象: 在上面的例子中,您会注意到我们使用的是而不是整数。为什么这样, python浮点数是可变的,而整数对象和字符串对象是不可变对象,所以Python 会很高 效的缓存它们。这会造成我们认为Python 应该创建新对象时,它却没有创建新对象的 假象。 看下面的例子: >>> a = 1 >>> id(a) 8402824 >>> b = 1 >>> id(b) 8402824 >>> >>> c = 1.0 >>> id(c) 8651220 >>> d = 1.0 >>> id(d) 8651204 在上面的例子中,a 和 b 指向了相同的整数对象,但是 c 和 d 并没有指向相同的浮点数对象,,, 如果我们是纯粹主义者,我们会希望 a 与 b 能和 c 与 d 一样,因为我们本意就是为 了创建两个整数对象,而不是像 b = a 这样的结果。但是系统利用了缓存的整数。 , 注意:Python 仅缓存简单整数,因为它认为在Python 应用程序中这些小整数会经常被用到。Python 缓存的整数范围是(-1, 100),不过这个范围是会改变的,所以请不要在你的应用程序使用这个特性。 , 布尔类型: not 运算符拥有最高优先级,只比所有比较运算符低一级。 and 和 or 运算符则相应的再低一级。 , 标准类型内建函数: Python 提供了一些内建函数用于这些基本对象类型,如:cmp(), repr(), str(), type(), 和等同于repr()函数的单反引号(``) 运算符。 函数 功能 cmp(obj1, obj2) 比较 obj1 和 obj2, 根据比较结果返回整数 i: i < 0 if obj1 < obj2 i > 0 if obj1 > obj2 i == 0 if obj1 == obj2 repr(obj) 或 `obj` 返回一个对象的字符串表示 str(obj) 返回对象适合可读性好的字符串表示 type(obj) 得到一个对象的类型,并返回相应的type 对象 例子: >>> a, b = -4, 12 >>> cmp(a,b) -1 >>> cmp(b,a) 1 >>> b = -4 >>> cmp(a,b) 0 >>> >>> str(4.53-2j) '(4.53-2j)' >>> >>> str(1) '1' >>> >>> str(2e10) '20000000000.0' >>> >>> str([0, 5, 9, 9]) '[0, 5, 9, 9]' >>> >>> repr([0, 5, 9, 9]) '[0, 5, 9, 9]' >>> >>> `[0, 5, 9, 9]` '[0, 5, 9, 9]' str(),repr()和``运算在特性和功能方面都非常相似。 , 使用更有效优化: 如:type(0),type(42),type(-100) 都是同一个对象,对象都是表示整数类型,可以使用 ,用types.IntType 替代type函数的调用,也是这个对象,则程序效率更高。 , 类型工厂函数: 所有的内建类型现在也都是类, 在这基础之上, 原来的所谓内建转换函数象int(), type(), list() 等等, 现在都成了工厂函数。 下面这些大家熟悉的工厂函数在老的Python 版里被称为内建函数: int(), long(), float(), complex() str(), unicode(), basestring() list(), tuple() type() , Python 的整型: Python仅需要使用一种Python 的整型,由于Python 的整型与长整型密切融合。即便数值超出整型的表达范围, 比如两个很大的数相乘, Python 会自动的返回一个长整数给你而不会报错。 , Python浮点类型: Python 的浮点类型实际上是C 语言的双精度浮点类型。Python 决定不支持单精度浮点数。Python 还有一种十进制浮点数类型 Decimal, 不过你必须导入decimal 模块才可以使用它。 , 传统除法: 如果是整数除法, 传统除法会舍去小数部分,返回一个整数(地板除)。如果操作数之一是浮点数,则执行真正的除法。例子: >>> 1 / 2 # perform integer result (floor) # 地板除 0 >>> 1.0 / 2.0 # returns actual quotient#真正除法 现阶段通过执行 from __future__ import division 指令, 可以做到真正除法。 >>> from __future__ import division >>> >>> 1 / 2 # returns real quotient 0.5 >>> 1.0 / 2.0 # returns real quotient 0.5 一个新的运算符 // 已经被增加进来, 以执行地板除: // 除法不管操作数何种数值类型,总是舍去小数部分,返回数字序列中比真正的商小的最接近的数字。 >>> 1 // 2 # floors result, returns integer # 地板除, 返回整数 0 >>> 1.0 // 2.0 # floors result, returns float # 地板除, 返回浮点数 0.0 >>> -1 // 2 # move left on number line# 返回比 –0.5 小的整数, 也就是 ,1 -1 , 转换工厂函数:int(), long(), float() 和 complex() 用来将其它数值类型转换为相应的数值类型。 , 功能函数 Python 有五个运算内建函数用于数值运算: abs(), coerce(), divmod(), pow(), pow() 和 round()。 abs()返回给定参数的绝对值。 coerce()返回一个包含类型转换完毕的两个数值元素的元组。 例子: >>> coerce(1, 2) (1, 2) >>> >>> coerce(1.3, 134L) (1.3, 134.0) >>> >>> coerce(1, 134L) (1L, 134L) >>> >>> coerce(1j, 134L) (1j, (134+0j)) >>> >>> coerce(1.23-41j, 134L) ((1.23-41j), (134+0j)) divmod()内建函数把除法和取余运算结合起来, 返回一个包含商和余数的元组。 对整数来说, 它的返回值就是地板除和取余操作的结果。 对浮点数来说, 返回的商部分是math.floor(num1/num2)。 例子: >>> divmod(10,3) (3, 1) >>> divmod(3,10) (0, 3) >>> divmod(10,2.5) (4.0, 0.0) >>> divmod(2.5,10) (0.0, 2.5) **) 运算符都可以进行指数运算。 函数 pow() 和双星号 ( 例子: >>> pow(2,5) 32 >>> >>> pow(5,2) 25 >>> pow(3.141592,2) 9.86960029446 >>> round()用于对浮点数进行四舍五入运算。它有一个可选的小数位数参数。如果不提供小 数位参数, 它返回与第一个参数最接近的整数(但仍然是浮点类型)。第二个参数告 诉round 函数将结果精确到小数点后指定位数。 例子: >>> round(3) 3.0 >>> round(3.45) 3.0 >>> round(3.4999999) 3.0 >>> round(3.4999999, 1) 3.5 , 模块介绍: decimal 十进制浮点运算类 Decimal array 高效数值数组(字符,整数,浮点数等等) math/cmath 标准C库数学运算函数。常规数学运算在match模块,复数运算在cmath模块 operator 数字运算符的函数实现。比如 tor.sub(m,n)等价于 m - n random 多种伪随机数生成器 该模块包含多个伪随机数发生器,它们均以当前的时间戳为随机数种子。这样只要载入这个模块就能随时开始工作。下面列出了该模块中最常用的函数: 两个整数参数,返回二者之间的随机整数 randrange() 它接受和 range() 函数一样的参数, 随机返回range([start,]stop[,step]) 结果的一项 uniform() 几乎和 randint()一样,不过它返回的是二者之间的一个浮点数(不包括范围上限)。 random() 类似 uniform() 只不过下限恒等于0.0,上限恒等于1.0 choice() 随机返回给定序列的一个元素 , 小技巧: 使用一个小技巧:用None 作为索引值,可以所以倒序列: >>> s = 'abcde' >>> for i in [None] + range(-1, -len(s), -1): ... print s[:i] ... abcde abcd abc ab a , 序列类型转换工厂函数: 函数 含义 list(iter) 把可迭代对象转换为列表 str(obj) 把obj 对象转换成字符串(对象的字符串表示法) unicode(obj) 把对象转换成Unicode 字符串(使用默认编码) basestring() 抽象工厂函数,其作用仅仅是为str 和unicode 函数提供父类,所 以不能被实例化,也不能被调用 tuple(iter) 把一个可迭代对象转换成一个元组对象 str()函数在需要把一个对象的可打印信息输出时特别有用,不仅仅是对序列类型,对其 他类型的对象同样如此。 Unicode()是str()函数的unicode 版本,它跟str()函数基本一样。 list()和tuple()函数在列表类型和元组类型的互换时非常有用。 , Python 解释器在处理字符串时是把它作为单一值并且不会包含其他Python 类型 的。字符串是不可变类型,就是说改变一个字符串的元素需要新建一个新的字符串。字符串是由独立的字符组成的,并且这些字符可以通过切片操作顺序地访问。 , str()作为工厂方法来创建一个字符串并把它赋值给一个变量例子: >>> aString = 'Hello World!' # 使用单引号 >>> anotherString = "Python is cool!" # 使用双引号 >>> print aString # print 不带引号的 Hello World! >>> anotherString # 不是进行print 操作,带有引号 'Python is cool!' >>> s = str(range(4)) # 把一个列表转换成一个字符串 >>> s '[0, 1, 2, 3]' else-if )语句: , elif (即 elif 是 Python 的 else-if 语句, 它检查多个表达式是否为真,并在为真时执行特定代码块中的代码。 和 else 一样,elif 声明是可选的,然而不同的是, if 语句后最多只能有一个 else语句,但可以有任意数量的 elif 语句。 if expression1: expr1_true_suite elif expression2: expr2_true_suite … elif expressionN: exprN_true_suite else: none_of_the_above_suite , 计数循环: >>> count = 0 >>> while (count < 9): ... print 'the index is:', count ... count += 1 ... the index is: 0 the index is: 1 the index is: 2 the index is: 3 the index is: 4 the index is: 5 the index is: 6 the index is: 7 the index is: 8 , 通过序列项迭代,for语句的使用: >>> nameList = ['Walter', "Nicole", 'Steven', 'Henry'] >>> for eachName in nameList: ... print eachName, "Lim" ... Walter Lim Nicole Lim Steven Lim Henry Lim , 通过序列的索引来迭代,for语句的使用: >>> nameList = ['Cathy', "Terry", 'Joe', 'Heather', 'Lucy'] >>> for nameIndex in range(len(nameList)): ... print "Liu,", nameList[nameIndex] ... Liu, Cathy Liu, Terry Liu, Joe Liu, Heather Liu, Lucy 说明: >>> len(nameList) 5 >>> range(len(nameList)) [0, 1, 2, 3, 4] , 使用内建的 enumerate() 函数,for语句的使用: >>> nameList = ['Donn', 'Shirley', 'Ben', 'Janice', ... 'David', 'Yen', 'Wendy'] >>> for i, eachLee in enumerate(nameList): ... print "%d %s Lee" % (i+1, eachLee) ... 1 Donn Lee 2 Shirley Lee 3 Ben Lee 4 Janice Lee 5 David Lee 6 Yen Lee 7 Wendy Lee , Python 提供了两种不同的方法来调用 range() 。 完整语法要求提供两个或三个整数参数: range(start, end, step =1) >>> range(2, 19, 3) [2, 5, 8, 11, 14, 17] 如果只给定两个参数,而省略 step, step 就使用默认值 1 . >>> range(3, 7) [3, 4, 5, 6] >>> for eachVal in range(2, 19, 3): ... print "value is:", eachVal ... value is: 2 value is: 5 value is: 8 value is: 11 value is: 14 value is: 17 , 下边是使用循环相关和序列相关函数的例子: sorted(), reversed(), enumerate(), zip() >>> albums = ('Poe', 'Gaudi', 'Freud', 'Poe2') >>> years = (1976, 1987, 1990, 2003) >>> for album in sorted(albums): ... print album, ... Freud Gaudi Poe Poe2 >>> >>> for album in reversed(albums): ... print album, ... Poe2 Freud Gaudi Poe >>> >>> for i, album in enumerate(albums): ... print i, album ... 0 Poe 1 Gaudi 2 Freud 3 Poe2 >>> >>> for album, yr in zip(albums, years): ... print yr, album ... 1976 Poe 1987 Gaudi 1990 Freud 2003 Poe2 , break 语句: break 语句可以结束当前循环然后跳转到下条语句,break 语句可以用在 while 和 for 循环中。 count = num / 2 while count > 0: if num % count == 0: print count, 'is the largest factor of', num break count -= 1 , Python 还提供了 pass 语句( C 中没有提供对应的语句)。 def foo_func(): pass 或是 if user_choice == 'do_calc': pass else: pass 这样的代码结构在开发和调试时很有用,因为编写代码的时候你可能要先把结构定下 来,但你不希望它干扰其他已经完成的代码,在不需要它做任何事情地方, 放一个pass 将是一个很好的主意。 另外它在异常处理中也被经常用到。 , 文件对象生成的迭代器会自动调用 readline() 方法。 循环就可以访问文本文件的所有行,更简单的 for eachLine in myFile 替换 for eachLine in myFile.readlines() : >>> myFile = open('config-win.txt') >>> for eachLine in myFile: ... print eachLine, # comma suppresses extra \n ... [EditorWindow] font-name: courier new font-size: 10 >>> myFile.close() , 三行五列的矩阵代码: >>> [(x+1,y+1) for x in range(3) for y in range(5)] [(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 1), (2, 2), (2,3), (2, 4), (2, 5), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)] , 磁盘文件样例: 一个数据文件 hhga.txt , 需要计算出所有非空白字符的数目: And the Lord spake, saying, "First shalt thou take out the Holy Pin. Then shalt thou count to three, no more, no less. Three shall be the number thou shalt count, and the number of the counting shall be three. Four shalt thou not count, nei- ther count thou two, excepting that thou then proceed to three. Five is right out. Once the number three, being the third number, be reached, then lobbest thou thy Holy Hand Grenade of Antioch towards thy foe, who, being naughty in My sight, shall snuff it." >>> f = open('hhga.txt', 'r') >>> len([word for line in f for word in line.split()]) 91 快速地计算文件大小 import os >>> os.stat('hhga.txt').st_size 499L >>> f.seek(0) >>> sum([len(word) for line in f for word in line.split()]) 408 , os 模块的文件/目录访问函数: 函数 描述 文件处理 amkfifo()/mknod() 创建命名管道/创建文件系统节点 remove()/unlink() Delete file 删除文件 brename()/renames() 重命名文件 *statc() 返回文件信息 symlink() 创建符号链接 utime() 更新时间戳 tmpfile() 创建并打开('w+b')一个新的临时文件 awalk() 生成一个目录树下的所有文件名 目录/文件夹 achdir()/fchdir() 改变当前工作目录/通过一个文件描述符改变当前工作目录 dchroot() 改变当前进程的根目录 listdir() 列出指定目录的文件 agetcwd()/getcwdu() 返回当前工作目录/功能相同, 但返回一个 Unicode 对象 mkdir()/makedirs() 创建目录/创建多层目录 rmdir()/removedirs() 删除目录/删除多层目录 访问/权限 access() 检验权限模式 chmod() 改变权限模式 achown()/lchown() 改变 owner 和 group ID/功能相同, 但不会跟踪链接 umask() 设置默认权限模式 文件描述符操作 open() 底层的操作系统 open (对于文件, 使用标准的内建 open() 函数) read()/write() 根据文件描述符读取/写入数据 dup()/dup2() 复制文件描述符号/功能相同, 但是是复制到另一个文件描述符 设备号 amakedev() 从 major 和 minor 设备号创建一个原始设备号 amajor()a /minor() 从原始设备号获得 major/minor 设备号 a. New in Python 2.3. b. New in Python 1.5.2. c. Includes stat(), lstat(), xstat(). d. New in Python 2.2. os.path 模块中的路径名访问函数 函数 描述 分隔 basename() 去掉目录路径, 返回文件名 dirname() 去掉文件名, 返回目录路径 join() 将分离的各部分组合成一个路径名 split() 返回 (dirname(), basename()) 元组 splitdrive() 返回 (drivename, pathname) 元组 splitext() 返回 (filename, extension) 元组 信息 getatime() 返回最近访问时间 getctime() 返回文件创建时间 getmtime() 返回最近文件修改时间 getsize() 返回文件大小(以字节为单位) 查询 exists() 指定路径(文件或目录)是否存在 isabs() 指定路径是否为绝对路径 isdir() 指定路径是否存在且为一个目录 isfile() 指定路径是否存在且为一个文件 islink() 指定路径是否存在且为一个符号链接 ismount() 指定路径是否存在且为一个挂载点 samefile() 两个路径名是否指向同个文件 文件相关模块: 模块 内容 base64 提供二进制字符串和文本字符串间的编码/解码操作 binascii 提供二进制和ASCII 编码的二进制字符串间的编码/解码操作 bz2a 访问 BZ2 格式的压缩文件 csva 访问 csv 文件(逗号分隔文件) filecmpb 用于比较目录和文件 fileinput 提供多个文本文件的行迭代器 getopt/optparsea 提供了命令行参数的解析/处理 glob/fnmatch 提供 Unix 样式的通配符匹配的功能 gzip/zlib 读写 GNU zip( gzip) 文件(压缩需要 zlib 模块) shutil 提供高级文件访问功能 c/StringIO 对字符串对象提供类文件接口 tarfilea 读写 TAR 归档文件, 支持压缩文件 tempfile 创建一个临时文件(名) uu 格式的编码和解码 zipfilec 用于读取 ZIP 归档文件的工具 a. New in Python 2.3. b. New in Python 2.0. c. New in Python 1.6.
本文档为【Python自学笔记】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_037433
暂无简介~
格式:doc
大小:75KB
软件:Word
页数:39
分类:互联网
上传时间:2018-04-27
浏览量:36