回味Python2.7——笔记2

一、模块

模块是包括 Python 定义和声明的文件。文件名就是模块名加上 .py 后缀。模块的模块名(做为一个字符串)可以由全局变量 __name__ 得到。

1、

模块可以导入其他的模块。 一个(好的)习惯是将所有的 import 语句放在模块的开始(或者是脚本),这并非强制。 被导入的模块名会放入当前模块的全局符号表中。

from fibo import * :这样可以导入所有除了以下划线( _ )开头的命名。

需要注意的是在实践中往往不鼓励从一个模块或包中使用 * 导入所有,因为这样会让代码变得很难读。不过,在交互式会话中这样用很方便省力。

2、模块的搜索路径

导入一个叫 spam 的模块时,解释器先在当前目录中搜索名为 spam.py 的文件。如果没有找到的话,接着会到 sys.path 变量中给出的目录列表中查找。

变量 sys.path 是解释器模块搜索路径的字符串列表。它由环境变量 PYTHONPATH 初始化,如果没有设定 PYTHONPATH ,就由内置的默认值初始化。

>>> import sys
>>> sys.path.append(‘/../..‘)

3、dir() 函数

内置函数 dir() 用于按模块名搜索模块定义,它返回一个字符串类型的存储列表

>>> import fibo, sys
>>> dir(fibo)
[‘__name__‘, ‘fib‘, ‘fib2‘]

无参数调用时, dir() 函数返回当前定义的命名:

>>> dir()
[‘__builtins__‘, ‘__doc__‘, ‘__file__‘, ‘__name__‘, ‘a‘, ‘fib‘, ‘fibo‘, ‘sys‘]

注意该列表列出了所有类型的名称:变量,模块,函数,等等。

列出内置函数和变量名

>>> import builtins
>>> dir(builtins)

[‘ArithmeticError‘, ‘AssertionError‘, ‘AttributeError‘, ‘BaseException‘, ‘BufferError‘, ‘BytesWarning‘......]

二、 输入和输出

1、格式化输出

通常,你想要对输出做更多的格式控制,而不是简单的打印使用空格分隔的值。 有两种方法可以格式化你的输出: 第一种方法是由你自己处理整个字符串,通过使用字符串切割和连接操作可以创建任何你想要的输出形式。string 类型包含一些将字符串填充到指定列宽度的有用操作,随后就会讨论这些。 第二种方法是使用 str.format() 方法。

标准模块 string 包括了一些操作,将字符串填充入给定列时,这些操作很有用。随后我们会讨论这部分内容。第二种方法是使用 Template 方法。

当然,还有一个问题,如何将值转化为字符串?很幸运,Python 有办法将任意值转为字符串:将它传入 repr() 或 str() 函数。

函数 str() 用于将值转化为适于人阅读的形式,而 repr() 转化为供解释器读取的形式(如果没有等价的语法,则会发生 SyntaxError 异常) 某对象没有适于人阅读的解释形式的话, str() 会返回与 repr() 等同的值。很多类型,诸如数值或链表、字典这样的结构,针对各函数都有着统一的解读方式。字符串和浮点数,有着独特的解读方式。

有两种方式可以写平方和立方表:

>>> for x in range(1, 11):
...     print repr(x).rjust(2), repr(x*x).rjust(3)
...     # Note use of ‘end‘ on previous line
...     print repr(x*x*x).rjust(4)
...
 1   1    1
 2   4    8
 3   9   27
 4  16   64
 5  25  125
 6  36  216
 7  49  343
 8  64  512
 9  81  729
10 100 1000

>>> for x in range(1, 11):
...     print ‘{0:2d} {1:3d} {2:4d}‘.format(x, x*x, x*x*x)
...
 1   1    1
 2   4    8
 3   9   27
 4  16   64
 5  25  125
 6  36  216
 7  49  343
 8  64  512
 9  81  729
10 100 1000
for x in range(1, 11):
    print ‘{0:5d} {1:5d} {2:5d}‘.format(x, x*x, x*x*x)
    1     1     1
    2     4     8
    3     9    27
    4    16    64
    5    25   125
    6    36   216
    7    49   343
    8    64   512
    9    81   729
   10   100  1000

以上是一个 str.rjust() 方法的演示,它把字符串输出到一列,并通过向左侧填充空格来使其右对齐。类似的方法还有 str.ljust() 和 str.center() 。这些函数只是输出新的字符串,并不改变什么。如果输出的字符串太长,它们也不会截断它,而是原样输出,这会使你的输出格式变得混乱,不过总强过另一种选择(截断字符串),因为那样会产生错误的输出值。(如果你确实需要截断它,可以使用切割操作,例如: x.ljust(n)[:n] 。)

还有另一个方法, str.zfill() 它用于向数值的字符串表达左侧填充 0。该函数可以正确理解正负号:

>>> ‘12‘.zfill(5)
‘00012‘
>>> ‘-3.14‘.zfill(7)
‘-003.14‘
>>> ‘3.14159265359‘.zfill(5)
‘3.14159265359‘

方法 str.format() 的基本用法如下:

>>> print ‘We are the {} who say "{}!"‘.format(‘knights‘, ‘Ni‘)
We are the knights who say "Ni!"

大括号和其中的字符会被替换成传入 str.format() 的参数。大括号中的数值指明使用传入 str.format() 方法的对象中的哪一个:

>>> print ‘{0} and {1}‘.format(‘spam‘, ‘eggs‘)
spam and eggs
>>> print ‘{1} and {0}‘.format(‘spam‘, ‘eggs‘)
eggs and spam

如果在 str.format() 调用时使用关键字参数,可以通过参数名来引用值:

>>> print ‘This {food} is {adjective}.‘.format(
...       food=‘spam‘, adjective=‘absolutely horrible‘)
This spam is absolutely horrible.

定位和关键字参数可以组合使用

>>> print ‘The story of {0}, {1}, and {other}.‘.format(‘Bill‘, ‘Manfred‘,
                                                       other=‘Georg‘)
The story of Bill, Manfred, and Georg.

‘!s‘ (应用 str() ) 和 ‘!r‘ (应用 repr() ) 可以在格式化之前转换值

字段名后允许可选的 ‘:‘ 和格式指令。这允许对值的格式化加以更深入的控制。下例将 Pi 转为三位精度。

>>> import math
>>> print(‘The value of PI is approximately {0:.3f}.‘.format(math.pi))
The value of PI is approximately 3.142.

在字段后的 ‘:‘ 后面加一个整数会限定该字段的最小宽度,这在美化表格时很有用。

>>> table = {‘Sjoerd‘: 4127, ‘Jack‘: 4098, ‘Dcab‘: 7678}
>>> for name, phone in table.items():
...     print ‘{0:10} ==> {1:10d}‘.format(name, phone)
...
Jack       ==>       4098
Dcab       ==>       7678
Sjoerd     ==>       4127

操作符 % 也可以用于字符串格式化.

>>> import math
>>> print ‘The value of PI is approximately %5.3f.‘ % math.pi
The value of PI is approximately 3.142.

2、文件读写

函数 open() 返回文件对象,通常的用法需要两个参数: open(filename, mode)

>>> f = open(‘workfile‘, ‘w‘)
>>> print f
<open file ‘workfile‘, mode ‘w‘ at 80a0960>

第一个参数是一个标识文件名的字符串。第二个参数是由有限的字母组成的字符串,描述了文件将会被如何使用。可选的 模式 有: ‘r‘ ,此选项使文件只读; ‘w‘ ,此选项使文件只写(对于同名文件,该操作使原有文件被覆盖); ‘a‘ ,此选项以追加方式打开文件; ‘r+‘ ,此选项以读写方式打开文件; 模式 参数是可选的。如果没有指定,默认为 ‘r‘ 模式

要读取文件内容,需要调用 f.read(size) ,该方法读取若干数量的数据并以字符串形式返回其内容, size 是可选的数值,指定字符串长度。如果没有指定 size 或者指定为负数,就会读取并返回整个文件。

>>> f.read()
‘This is the entire file.\n‘
>>> f.read()
‘‘

f.readline() 从文件中读取单独一行,字符串结尾会自动加上一个换行符( \n ),只有当文件最后一行没有以换行符结尾时,这一操作才会被忽略。

>>> f.readline()
‘This is the first line of the file.\n‘
>>> f.readline()
‘Second line of the file\n‘
>>> f.readline()
‘‘

f.readlines() 返回一个列表,其中包含了文件中所有的数据行。

>>> f.readlines()
[‘This is the first line of the file.\n‘, ‘Second line of the file\n‘]

当你使用完一个文件时,调用 f.close() 方法就可以关闭它并释放其占用的所有系统资源。

用关键字 with 处理文件对象是个好习惯。它的先进之处在于文件用完后会自动关闭,就算发生异常也没关系。它是 try-finally 块的简写

pickle 模块

Python 提供了一个名为 pickle的标准模块。这是一个令人赞叹的模块,几乎可以把任何 Python 对象 (甚至是一些 Python 代码段!)表达为为字符串,这一过程称之为封装 ( pickling )。从字符串表达出重新构造对象称之为拆封( unpickling )。封装状态中的对象可以存储在文件或对象中,也可以通过网络在远程的机器之间传输。

如果你有一个对象 x ,一个以写模式打开的文件对象 f ,封装对象的最简单的方法只需要一行代码:

pickle.dump(x, f)

如果 f 是一个以读模式打开的文件对象,就可以重装拆封这个对象:

x = pickle.load(f)
时间: 2024-10-28 15:42:44

回味Python2.7——笔记2的相关文章

回味Python2.7——笔记4

一.Python 标准库概览 1.操作系统接口 os 模块提供了很多与操作系统交互的函数: >>> import os >>> os.getcwd() # Return the current working directory 'C:\\Python27' >>> os.chdir('/server/accesslogs') # Change current working directory >>> os.system('mkdi

回味Python2.7——笔记3

一.错误和异常 1.异常处理 >>> while True: ... try: ... x = int(raw_input("Please enter a number: ")) ... break ... except ValueError: ... print "Oops! That was no valid number. Try again..." ... try 语句按如下方式工作: 首先,执行 try 子句 (在 try 和 excep

python2 httplib 笔记

python2  httplib 笔记 #coding=utf-8 ''' Created on 2014年9月25日 @author: cocoajin ''' import httplib,urllib base='httpbin.org' #不需要添加 "http://" con=httplib.HTTPConnection(base) ip = '/ip' con.request('GET',ip) re=con.getresponse() print re.getheader

再次回味Python2——笔记

一.基本知识 1.一个值可以同时赋给几个变量: >>> x = y = z = 0 # Zero x, y and z >>> x 0 >>> y 0 >>> z 0 2.创建复数 >>> a=1+6j >>> x=complex(1,3) # x=1+3j>>>x.real1>>>x.imag 3 3.字符串 >>> 'spam eggs' '

Effective Python2 读书笔记1

Item 2: Follow the PEP 8 Style Guide Naming Naming functions, variables, attributes lowercase_underscore protected instance attributes _leading_underscore private instance attributes __double_leading_underscore classes, exceptions CapitalizedWord mod

Effective Python2 读书笔记2

Item 14: Prefer Exceptions to Returning None Functions that returns None to indicate special meaning are error prone because None and other values (e.g., zero, the empty string) all evaluate to False in conditional expressions. Raise exceptions to in

python2 urllib 笔记

import urllib base='http://httpbin.org/' ip=base+'ip' r=urllib.urlopen(ip) print r.geturl() print r.read() #get get=base+"get" parms=urllib.urlencode({"name":"tom","age":18}) r=urllib.urlopen("%s?%s"%(get,

OpenCV学习笔记(二十):Win8.1 64位+OpenCV 2.4.9+Python2.7.9配置

OpenCV提供了Python接口,主要特性包括: 提供与OpenCV 2.x中最新的C++接口极为相似的Python接口,并且包括C++中不包括的C接口 提供对OpenCV 2.x中所有主要部件的绑定:CxCORE (almost complete), CxFLANN (complete), Cv (complete), CvAux (C++ part almost complete, C part in progress), CvVidSurv (complete), HighGui (co

【学习笔记】python2和python3的input()

python2中的input()只接受变量作为传入值,非变量内容会报错. 1 >>> user=input("Enter your name:") 2 Enter your name:Kaito 3 Traceback (most recent call last): 4 File "<stdin>", line 1, in <module> 5 File "<string>", line 1