去年夏天開(kāi)始接觸Python,剛開(kāi)始覺(jué)得這個(gè)語(yǔ)言相當(dāng)簡(jiǎn)潔精練,斷斷續(xù)續(xù)的學(xué)了一些基礎(chǔ)知識(shí),打算今年好好地系統(tǒng)學(xué)一下。先把以前看深入Python時(shí)做的筆記整理一下,以免像以前那樣學(xué)了后面的就忘了前面的基礎(chǔ)知識(shí)。
第一個(gè)Python示例小程序:
1 2 3 4 5 6 7 8 9 10 11 12 | def buildConnectionString(params): """Build a
connection string from a dictionary Returns
string. """ return ";" .join([ "%s=%s" % (k,v)
for k, v
in params.items()]) if __name__ = = "__main__" : myParams
= { "server" : "temp" ,\ "database" : "db_temp" ,\ "uid" : "sa" ,\ "pwd" : "dont know" } print buildConnectionString(myParams) |
運(yùn)行結(jié)果:
>>>
pwd = secret;database = master;uid = sa;server = mpilgrim |
函數(shù)聲明
首先,函數(shù)聲明以關(guān)鍵字def開(kāi)始,接著為函數(shù)名,然后為參數(shù),參數(shù)放在小括號(hào)里,多個(gè)參數(shù)之間用逗號(hào)分隔。
其次,函數(shù)沒(méi)有定義返回的數(shù)據(jù)類(lèi)型,Python不需要指定返回值的數(shù)據(jù)類(lèi)型;甚至不需要指定是由有返回值。實(shí)際上,每個(gè)Python函數(shù)都返回一個(gè)值,如果函數(shù)執(zhí)行過(guò)return語(yǔ)句,它將返回指定的值,否則將返回None空值。在Python中參數(shù)不需要指定數(shù)據(jù)類(lèi)型,Python會(huì)判定一個(gè)變量是什么類(lèi)型,并在內(nèi)部將其記錄下來(lái)。
文檔化函數(shù)
可以通過(guò)給出一個(gè) doc string (文檔說(shuō)明的字符串) 來(lái)文檔化一個(gè) Python 函數(shù)。定義 buildConnectionString 函數(shù)的 doc string
1 2 3 4 5 | def buildConnectionString(params): """Build a
connection string from a dictionary of parameters. Returns
string.""" |
三重引號(hào)表示一個(gè)多行字符串。在開(kāi)始與結(jié)束引號(hào)間的所有東西都被視為單個(gè)字符串的一部分,包括硬回車(chē)和其它的引號(hào)字符。您可以在任何地方使用它們,但是您可能會(huì)發(fā)現(xiàn),它們經(jīng)常被用于定義 doc string。
在三重引號(hào)中的任何東西都是這個(gè)函數(shù)的 doc string,它們用來(lái)說(shuō)明函數(shù)可以做什么。如果存在 doc string,它必須是一個(gè)函數(shù)要定義的第一個(gè)內(nèi)容 (也就是說(shuō),在冒號(hào)后面的第一個(gè)內(nèi)容)。在技術(shù)上不要求給出函數(shù)的 doc string,但應(yīng)該盡可能為每個(gè)函數(shù)都添加doc string,它 在運(yùn)行時(shí)可作為函數(shù)的屬性。
萬(wàn)物皆對(duì)象
在Python中,函數(shù)同其它東西一樣也是對(duì)象(剛開(kāi)始覺(jué)得很新奇)。
1 2 3 4 5 6 7 | >>>
import odbchelper ( 1 ) >>>
params = { "server" : "mpilgrim" , "database" : "master" , "uid" : "sa" , "pwd" : "secret" } >>>
print odbchelper.buildConnectionString(params) ( 2 ) server = mpilgrim;uid = sa;database = master;pwd = secret >>>
print odbchelper.buildConnectionString.__doc__ ( 3 ) Build a
connection string from a dictionary Returns
string. |
(1)第一行將 odbchelper 程序作為模塊導(dǎo)入。模塊是指一個(gè)可以交互使用,或者從另一 Python 程序訪問(wèn)的代碼段。 只要導(dǎo)入了一個(gè)模塊,就可以引用它的任何公共的函數(shù)、類(lèi)或?qū)傩?。模塊可以通過(guò)這種方法來(lái)使用其它模塊的功能。
(2)當(dāng)使用在被導(dǎo)入模塊中定義的函數(shù)時(shí),必須包含模塊的名字。所以不能只使用 buildConnectionString,而應(yīng)該使用 odbchelper.buildConnectionString。
(3)訪問(wèn)函數(shù)的 __doc__ 屬性并不是通過(guò)函數(shù)調(diào)用。
代碼縮進(jìn)
Python 函數(shù)沒(méi)有明顯的 begin 和 end,沒(méi)有標(biāo)明函數(shù)的開(kāi)始和結(jié)束的花括號(hào)。唯一的分隔符是一個(gè)冒號(hào) (:),接著代碼本身是縮進(jìn)的。
代碼塊是通過(guò)它們的縮進(jìn)來(lái)定義的。這里所說(shuō)的“代碼塊”是指:函數(shù)、if 語(yǔ)句、for 循環(huán)、while 循環(huán),等等。開(kāi)始縮進(jìn)表示塊的開(kāi)始,取消縮進(jìn)表示塊的結(jié)束。不存在明顯的括號(hào),大括號(hào)或關(guān)鍵字。
測(cè)試模塊
所有的 Python 模塊都是對(duì)象,并且有幾個(gè)有用的屬性??梢允褂眠@些屬性方便地測(cè)試你所編寫(xiě)的模塊。下面是一個(gè)使用 if __name__ 的技巧。
if __name__ = = "__main__" : |
首先,if 表達(dá)式無(wú)需使用圓括號(hào)括起來(lái)。其次,if 語(yǔ)句以冒號(hào)結(jié)束,緊跟其后的是縮進(jìn)代碼。
模塊是對(duì)象,并且所有的模塊都有一個(gè)內(nèi)置屬性 __name__。一個(gè)模塊的 __name__ 的值取決于你如何應(yīng)用模塊。如果 import 模塊,那么 __name__ 的值通常為模塊的文件名,不帶路徑或者文件擴(kuò)展名。但是你也可以像一個(gè)標(biāo)準(zhǔn)的程序一樣直接運(yùn)行模塊,在這種情況下 __name__ 的值將是一個(gè)特別的缺省值,__main__,這樣你可以很方便地測(cè)試單個(gè)模塊。