好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

Python手册.doc

10页
  • 卖家[上传人]:jiups****uk12
  • 文档编号:40015048
  • 上传时间:2018-05-22
  • 文档格式:DOC
  • 文档大小:85.50KB
  • / 10 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 6. 输入输出输入输出6.1 设计输出格式设计输出格式输出值的方法:表达式语句、print 语句和 write()方法想要对输入字符串格式做一些复杂的控制,有两种方法第一,控制整个字符串,使用字符切割和联接操作创建任意输出形式第二,使用%操作符和字符串作为左参数操作符将左参数解释为类似于 sprintf()风格的格式字符串,并作用于右参数,从操作中返回格式化的字符串Python 中可以使用 repr()或 str()函数,将值转为字符串反引号('')等价于 repr()这些函数在未来的 Python 版本中将会被去掉函数 str()用于将值转化为适于人阅读的形式,而 repr()转化为共解释器读取的形式(如果没有等价的语法,则会发生 SyntaxError 异常)某对象没有适于人阅读的解释形式时,str()会返回与 repr()等同的值数值、链表、字典对各函数有统一的解读方式字符串和浮点数,有独特的解读方式示例:>>> s= 'Hello World!' >>> str(s) 'Hello World!' >>> repr(s) “'Hello World!'“ >>> str(0.1) '0.1' >>> repr(0.1) '0.10000000000000001' >>> hello = 'hello world\n' >>> print hello hello world>>> print repr(hello) 'hello world\n' >>> print str(hello) hello world>>> x = 10*3.25 >>> y = 200*200 >>> 'x, y, (`spam`,`eggs`)' 'x, y, (`spam`,`eggs`)' >>> 一个输出平方和立方的例子:>>> for x in range(1, 11): ... print repr(x).rjust(2), repr(x*x).rjust(3), ... print repr(x*x*x).rjust(4) ... 1 1 12 4 83 9 274 16 645 25 1256 36 2167 49 3438 64 5129 81 729 10 100 1000 >>> print 方法总会在两个参数之间增加一个空格。

      rjust()函数参数为输出所占的位数,输出方式为右对齐类似的函数有 ljust()和 center()这些函数只是输出新的字符串,并不改变它们,如果输出的字符串太长,也不会被截断,而是原样输出如果要截断字符串,可以使用切割操作,如,x.ljust(n)[:n]zfill()用于向数值的字符串表达左侧填充 0该函数可以正确理解正负号>>> '12'.zfill(5) '00012' >>> '-3.14'.zfill(7) '-003.14' >>> '3.14159265359'.zfill(5) '3.14159265359' >>> %操作符使用方法>>> import math >>> print 'The value of PI is approximately %5.3f.' % math.pi The value of PI is approximately 3.142. >>> 如果有超过一个的字符串要格式化为一体,就需要将它们传入一个元组做为右值:>>> table = {'A':001, 'B':002, 'C':003} >>> for name, phone in table.items(): ... print '%-10s ==> %10d' % (name, phone) ... A ==> 1 C ==> 3B ==> 2 >>> 大多数类 C 的格式化操作都需要传入适当的类型。

      使用%s 格式会更轻松一些:如果对应的参数不是字符串,它会通过内置的 str()函数转化为字符串Python 支持用*作为一个隔离参数来传递宽度或精度Python 不支持 C 的%n 和%p 操作符变量格式化通过名字而不是位置,这样可以产生符合真实长度的格式化字符串,而不用分隔这一效果可以通过使用 form % (name) format 结构来实现:>>> table = {'A':001, 'B':002, 'C':003} >>> print 'A:%(A)d; B:%(B)d; C:%(C)d' % table A:1; B:2; C:3 >>> 这个技巧在新的内置函数 vars()组合使用时非常有用,该函数返回一个包含所有局部变量的字典6.2 读写文件读写文件open()返回一个文件,通过的用法需要两个参数:open(filename, mode)>>> f = open('C:/Users/cym/Desktop/1.txt', 'w') >>> print f>>> mode 有:r,此选项使文件只读,默认模式;w,此选项使文件只写,对于已经存在的同名文件,该操作覆盖源文件;a,此选项以追加方式打开文件;r+,此选项以读写方式打开文件。

      在 Windows 和 Moc 平台,b 模式以二进制方式打开文件,所以会有 rb,wb,r+b 等等组合Windows 平台上文本文件与二进制文件是有区别的,读写文本文件时,行尾会自动添加行结束符这种后台操作方式对 ASCII 文本文件没有什么问题,但是操作 JPEG 或EXE 这样的二进制文件就会产生破坏在操作这些文件时一定要记得以二进制模式打开6.2.1 文件对象方法文件对象方法读文件,f.read(size)该方法读取若干数量的数据并以字符串形式返回其内容,字符串长度为数值 size 所指定的大小如果没有指定 size 或者指定为负数,就会读取并返回整个文件当文件大小为当前机器内存两倍时,就会产生问题正常情况下,会尽可能按比较大的 size 读取和返回数据如果到了文件末尾,f.read()会返回一个空字符串>>> f = open('C:/Users/cym/Desktop/1.txt', 'r') >>> f.read() '' >>> f.readline()从文件中读取单独一行,字符串结尾会自动加上一个换行符,只有当文件最后一行没有以换行符结尾时,这一操作才会被忽略如果 f.readline()返回一个空字符串,那就表示到达了文件末尾,如果是一个空行,就会描述为\n,一个只包含换行符的字符串。

      f.readlines([size])返回一个列表,包含了文件中所有的数据行如果给定了 size 参数,就会读入多于一行的比特数,从中返回多行文本这个功能通常用于高效读取大型行文本,避免了将整个文件读入内存这种操作只返回完整的行一种另外的方法是循环读取文件这是一种内存效率高,速度快,代码简单的方法:>>> for line in f: ... print line, ... 交换通道很简单,但是不提供完整的控制因为两个通道管理线缓冲不同,它们不能混合如果需要写入字符串以外的数据,就要先把这些数据转换为字符串>>> f = open('C:\\Users\\cym\\Desktop\\test.txt','r+') >>> value = ('the answer', 42) >>> s = str(value) >>> f.write(s) >>> f.close() >>> f.tell()返回一个整数,代表文件对象在文件中的指针位置,该数值计量了自文件开头到指针处的比特数需要改变文件对象指针的话,使用 f.seek(offset, from_what)指针在该操作中从指定的引用位置移动 offset 比特,引用位置由 from_what 参数指定。

      from_what 值为0 表示自文件起处开始,1 表示自当前文件指针位置开始,2 表示自文件末尾开始from_what 可以忽略,其默认值为 0,此时从文件头开始文件使用完后,调用 f.close()可以关闭文件,释放打开文件后占用的系统资源调用f.close()之后,再调用文件对象会自动引发错误文件对象还有一些不太常用的附加方法,比如 isatty()和 truncate()6.2.2 pickle 模块模块我们可以很容易的读写文件中的字符串数值就要多费点周折,因为 read()方法只会返回字符串,应该将其传入 int()方法中,就可以将'123'这样的字符串转为对应的数值123不过,当你需要保存更为复杂的数据类型,例如链表、字典,类的实例,事情就会变的更复杂了Python 提供了一个名为 pickle 的标准模块这是一个令人赞叹的模块,几乎可以把任何 Python 对象表达为字符串,这一过程称之为封装从字符串表达出重新构造对象之为拆封 unpickling封装状态中的对象可以存储在文件或对象中,也以通过网络在远程的机器之间传输如果你有一个对象 x,一个以写模式打开的文件对象 f,封装对象的最简单的方法只需要一行代码:pickle.dump(x,f)如果 f 是一个以读模式打开的文件对象,就可以重装拆封这个对象:x=pickle.load(f)pickle 是存储 Python 对象以供其它程序或其本身以后调用的标准方法。

      提供这一组技术的一个持久化对象因为 pickle 的用途很广泛,很多 Python 扩展的作者都非常注意类似矩阵这样的新数据类型是否适合封装和拆封7. 错误和异常错误和异常7.1 语法错误语法错误语法错误,也称作解析错误解析器会重复出错的行,并在行中最早发现的错误位置上显示一个小箭头,错误就发生在箭头指向的位置7.2 异常异常即使是在语法上完全正确的语句,尝试执行它的时候,也有可能会发生错误在程序运行中检测出的错误称之为异常,它通常不会导致致命的问题大多数异常不会由程序处理,而是显示一个错误信息:>>> 10 * (1/0) Traceback (most recent call last):File ““, line 1, in ZeroDivisionError: integer division or modulo by zero >>> 4 + spam*3 Traceback (most recent call last):File ““, line 1, in NameError: name 'spam' is not defined >>> '2' + 2 Traceback (most recent call last):File ““, line 1, in TypeError: cannot concatenate 'str' and 'int' objects>>> 错误信息的最后一行指出发生了什么错误。

      异常也有不同的类型,异常类型作为错误信息的一部分显示出来:示例中的异常分别为零除错误(ZeroDivisionError) ,命名错误(NameError)和类型错误(TypeError) 打印错误信息时,异常的类型作为异常的内置名显示对于所有的内置异常都是如此,不过用户自定义异常就不一定了标准异常名是内置的标识这一行后一部分是关于该异常类型的详细说明,这意味着它的内容依赖于异常类型错误信息的前半部分以堆栈的形式列出异常发生的位置通常在堆栈中列出了源代码行,然而,来自标准输入的源码不会显示出来7.3 处理异常处理异常通过编程可以处理指定的异常以下的例子重复要求用户输入一个值,直到用户输入的是一个合法的整数为止不过这个程序允许用户中断程序需要注意的是用户发出的中断会引发一个 KeyboardInterrupt 异常try 语句。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.