1. 程式人生 > >回味Python2.7——筆記2

回味Python2.7——筆記2

字母 open emp war absolut pla 許可 傳輸 數值

一、模塊

模塊是包括 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)

回味Python2.7——筆記2