Python學習4-Python的交互


Python的交互

      在很多時候,你會想要讓你的程序與用戶(可能是你自己)交互。你會從用戶那里得到輸入,然后打印一些結果。我們可以分別使用raw_input和input語句來完成這些功能。對於輸出,你也可以使用多種多樣的str(字符串)類。例如,你能夠使用rjust方法來得到一個按一定寬度右對齊的字符串。利用help(str)獲得更多詳情。

另一個常用的輸入/輸出類型是處理文件。創建、讀和寫文件的能力是許多程序所必需的

文件:

你可以通過創建一個file類的對象來打開一個文件,分別使用file類的read、readline或write方法來恰當地讀寫文件。對文件的讀寫能力依賴於你在打開文件時指定的模式。最后,當你完成對文件的操作的時候,你調用close方法來告訴Python我們完成了對文件的使用。

#!/usr/bin/python

#Tue Jan 8 21:25:42 CST 2013

poem='''\

Programming is fun

When the work is done

If you wanna make your work also fun:

use Python!

'''

f=file('poem.txt','w')

f.write(poem)

f.close()

f=file('poem.txt')

while True:

line=f.readline()

if len(line) == 0:

break

print line,

f.close()

打開文件的模式可為讀(‘r’)、寫(‘w’)或追加(‘a’)。

write只能寫入字符串。

儲存器

Python提供了一個標准的模塊,稱為pickle。使用它你可以在一個文件中儲存任何Python對象,之后你又可以把它完整的取出來,這被稱為持久地儲存對象。

還有一個模塊cPickle,它的功能和pickle模塊完全相同,但是用C語言寫的所以比pickle快。

#!/usr/bin/python

#Wed Jan 9 17:40:54 CST 2013

import cPickle  as p

shoplistfile='shoplist.data'

shoplist=['apple','egg','banana']

f=file(shoplistfile,'w')

p.dump(shoplist,f)

f.close

f=file(shoplistfile)

storedlist=p.load(f)

print storedlist

使用import.. as語法。以便我們可以使用跟段的模塊名稱。

Python也有異常的處理。用try..except進行異常處理。我們把通常的語句放在try塊中,而把我們的錯誤處理語句放在except塊中。

我們把所有可能引發錯誤的語句放在try塊中,然后在except從句/塊中處理所有的錯誤和異常。except從句可以專門處理單一的錯誤或異常,或者一組包括在圓括號內的錯誤/異常。如果沒有給出錯誤或異常的名稱,它會處理 所有的 錯誤和異常。對於每個try從句,至少都有一個相關聯的except從句。

try..finally

假如你在讀一個文件的時候,希望在無論異常發生與否的情況下都關閉文件,該怎么做呢?這可以使用finally塊來完成。注意,在一個try塊下,你可以同時使用except從句和finally塊。如果你要同時使用它們的話,需要把一個嵌入另外一個。

在程序中運行time.sleep(2)進行程序休息。需要加在time模塊。

Python標准庫是隨Python附帶安裝的,它包含大量機器有用的模塊。

sys模塊

     sys模塊包含系統對應的功能。    

     sys.version字符串給你提供安裝的Python的版本信息。sys.version_info元組則提供。               

     一個對於有經驗的程序員,sys模塊中其他令人感興趣的項目有sys.stdin、sys.stdout和sys.stderr它們分別對應你的程序的標准輸入、標准輸出和標准錯誤流。更簡單的方法來使你的程序具備Python版本要求功能。

讀取文件:file()

               f.readline()

os模塊

這個模塊包含普遍的操作系統功能。如果你希望你的程序能夠與平台無關的話,這個模塊是尤

為重要的。即它允許一個程序在編寫后不需要任何改動,也不會發生任何問題,就可以在

Linux和Windows下運行。一個例子就是使用os.sep可以取代操作系統特定的路徑分割符。

下面列出了一些在os模塊中比較有用的部分。它們中的大多數都簡單明了。

● os.name字符串指示你正在使用的平台。比如對於Windows,它是'nt',而對於Linux/Unix

用戶,它是'posix'。

● os.getcwd()函數得到當前工作目錄,即當前Python腳本工作的目錄路徑。

● os.getenv()和os.putenv()函數分別用來讀取和設置環境變量。

● os.listdir()返回指定目錄下的所有文件和目錄名。

● os.remove()函數用來刪除一個文件。

● os.system()函數用來運行shell命令。

● os.linesep字符串給出當前平台使用的行終止符。例如,Windows使用'\r\n',Linux使

用'\n'而Mac使用'\r'。

● os.path.split()函數返回一個路徑的目錄名和文件名。

>>> os.path.split('/home/swaroop/byte/code/poem.txt')

('/home/swaroop/byte/code', 'poem.txt')

● os.path.isfile()和os.path.isdir()函數分別檢驗給出的路徑是一個文件還是目錄。類似地,os.path.exists()函數用來檢驗給出的路徑是否真地存在。

更多的Python的內容

在Python中的特殊的方法具有特殊的含義,比如__init__和__del__方法。

一般說來,特殊的方法都被用來模仿某個行為。例如,如果你想要為你的類使用x[key]這樣的索引操作(就像列表和元組一樣),那么你只需要實現__getitem__()方法就可以了。想一下,Python就是對list類這樣做的!

下面這個表中列出了一些有用的特殊方法。如果你想要知道所有的特殊方法,你可以在《Python參考手冊》中找到一個龐大的列表。

表15.1 一些特殊的方法

名稱說明

__init__(self,...)      這個方法在新建對象恰好要被返回使用之前被調用。

__del__(self)      恰好在對象要被刪除之前調用。

__str__(self)      在我們對對象使用print語句或是使用str()的時候調用。

__lt__(self,other)     當使用 小於 運算符(<)的時候調用。類似地,對於所有的運算符(+,>等等)都有特殊的方法。

__getitem__(self,key)     使用x[key]索引操作符的時候調用。

__len__(self)      對序列對象使用內建的len()函數的時候調用。

在函數中接收元組和列表

當要使函數接收元組或字典形式的參數的時候,有一種特殊的方法,它分別使用*和**前綴。這種方法在函數需要獲取可變數量的參數的時候特別有用。

>>> def powersum(power, *args):

... '''Return the sum of each argument raised to specified power.'''

... total = 0

... for i in args:

... total += pow(i, power)

... return total

...

>>> powersum(2, 3, 4)

25

>>> powersum(2, 10)

100

lambda形式

lambda語句被用來創建新的函數對象,並且在運行時返回他們。

exec和eval語句

exec語句用來執行儲存在字符串或文件中的Python語句。例如,我們可以在運行時生成一個包含Python代碼的字符串,然后使用exec語句執行這些語句。下面是一個簡單的例子。

>>> exec 'print "Hello World"'

Hello World

eval語句用來計算存儲在字符串中的有效Python表達式。下面是一個簡單的例子。

>>> eval('2*3')

6

assert語句

assert語句用來聲明某個條件是真的。例如,如果你非常確信某個你使用的列表中至少有一個元素,而你想要檢驗這一點,並且在它非真的時候引發一個錯誤,那么assert語句是應用在這種情形下的理想語句。當assert語句失敗的時候,會引發一個AssertionError。

>>> mylist = ['item']

>>> assert len(mylist) >= 1

>>> mylist.pop()

'item'

>>> assert len(mylist) >= 1

Traceback (most recent call last):

File "<stdin>", line 1, in ?

AssertionError


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM