這是自己做的練習,可能有錯誤,歡迎討論和各種最佳化重構方案。
根據反饋,或者code review,對本篇文章答案或者相關內容的更新補充,一般會被添加在本篇部落格的評論中。
將盡量保證每題的答案代碼是完整的,不僅僅是函數或者類,開啟Python 2.7的IDLE,將代碼完整拷貝進去,就能調試運行。
歡迎訪問Balian在部落格園的家。 http://www.cnblogs.com/balian
14-1.
可調用對象。說出Python中的可調用對象。exec語句和內建函數eval()有什麼不同。
【答案】
Python中的可調用對象有三:
函數-包括內建函數(BIF),使用者定義函數(UDF),lambda運算式
方法-包括內建方法(BIM),使用者定義方法(UDM)
類-也就是類執行個體
exec語句是一個BIF。exec obj表示執行obj,obj可以是單一的Python語句或者語句的集合(即代碼對象或者字串)或者一個檔案對象(一個被開啟的Python指令碼)。exec語句只有obj參數。參考該書第419頁。
eval()接收括弧內的字串,並把它作為Python運算式進行求值。eval()還有可選的的第二第三參數。參考該書第418頁。
14-2.
input()和raw_input()。內建函數input()和raw_input()有什麼不同?
這裡附一個英文版書中的原題。
【答案】
input()為內建函數(BIF),是eval()和raw_input()的組合,即eval(raw_input())。
和raw_input()一樣,input()有可選字串參數,該參數是給使用者的字串提示。
raw_input()總是以字串的形式,逐字返回使用者的輸入。
input()把輸入作為Python運算式求值,返回一個Python對象。
【參考代碼】
>>> b = input("Please input a formular: ... ")Please input a formular: ... 1 + 2>>> b3>>> a = raw_input("Please input a formular: ..." )Please input a formular: ...1 + 2>>> a'1 + 2'>>>
14-3.
執行環境。建立運行其他Python指令碼的Python指令碼。
【答案】
代碼如下:
>>> exec '''... print 'Hello World!'... '''Hello World!>>>
14-4.
os.system()。選擇熟悉的系統命令,該命令執行任務時不需要輸入,也不輸出到螢幕或根本不輸出任何東西。調用os.system()運行程式。附加題:將你的解決方案移植到subprocess.call()。
【答案】
這裡選用系統命令dir > test.txt。Dir的結果是存放在test.txt檔案中,所以這個命令不需要輸入,也無輸出到螢幕。
代碼如下:
>>> import os>>> os.system("dir > test.txt")0>>>
附加題代碼如下:
>>> import subprocess>>> subprocess.call(('dir > test.txt'), shell = True)0>>>
14-5.
commands.getoutput()。用commands.getoutput()解決前面的問題。
【答案】
commands.getoutput()在unix平台才能運行。參考http://bugs.python.org/issue15073