《簡明Python教程》筆記

簡明Python教程A Byte of Python的中譯本, 旨在引導(dǎo)讀者快速入門挣惰。本文總結(jié)了該教程Python 2.x版Python 3.x版的內(nèi)容和差異。

介紹

Python的特色

  • 解釋型
  • 面向?qū)ο?/li>
  • 動態(tài)數(shù)據(jù)類型
  • 膠水語言
  • 標(biāo)準(zhǔn)庫功能齊全

起步

使用交互式的提示符

  • 在命令行輸入python進(jìn)入交互環(huán)境缤至。
  • Python 2.x 直接輸入print 'hello world'短曾。Python 3.x 中print不再是操作符,而成為函數(shù)谅猾,使用方法為print('hello world')柄慰。
  • 運(yùn)行help()獲取幫助,按q退出幫助税娜。help(func)得到函數(shù)的信息坐搔。加入引號print('str')可得到操作符的信息。

使用源文件

  • 將代碼保存為helloworld.py敬矩。然后概行,在終端執(zhí)行python helloworld.py或者./helloworld.py
  • 要直接運(yùn)行Python程序弧岳,在Unix有個標(biāo)準(zhǔn)的實現(xiàn)方法:在源文件行首加上#!/usr/bin/python凳忙。它被稱作組織行业踏,源文件的頭兩個字符是#!(叫做pound bang或者shebang),后面跟著一個程序的絕對路徑涧卵。如果不知道位置堡称,可以寫成#!/usr/bin/env python,但有多個python版本共存時不可以艺演,因為舊版本的Python可能運(yùn)行程序却紧。
  • Unix/Linux用戶需要chmod a+x helloworld.py命令使文件可執(zhí)行。

基本概念

數(shù)

  • 四種類型:整數(shù)胎撤、長整數(shù)晓殊、浮點數(shù)、復(fù)數(shù)

字符串

  • 雙引號與單引號字符串完全相同
  • 三引號('''""")指示多行的字符串
  • 轉(zhuǎn)義符\也可用于表示下一行繼續(xù)
  • 自然字符串通過給字符串加上前綴rR來指定
  • Unicode字符串前加前綴uU
  • 字符串不可變
  • 相鄰字符串會被自動級連伤提,如'hello' 'world'會被自動轉(zhuǎn)為'helloworld'巫俺。注意,如果輸入print 'hello','world'肿男,逗號會變?yōu)榭崭窠樾冢Y(jié)果為hello world

標(biāo)識符

  • 第一個字符為字母或下劃線
  • 其他部分可以為字母舶沛、下劃線嘹承、數(shù)字
  • 大小寫敏感

對象

  • 數(shù)、字符串如庭、函數(shù)都是對象
  • 使用變量時不需要聲明或定義數(shù)據(jù)類型

邏輯行與物理行

  • 建議每個物理行只寫一句邏輯行
  • 盡量避免使用分號

縮進(jìn)

  • 同一層次的語句必須有相同的縮進(jìn)

運(yùn)算符與表達(dá)式

控制流

  • if: 沒有switch叹卷,用if..elif..else或字典完成同樣工作
  • while: 有一個可選的else從句
  • for..in: 如for i in range(0,5), 可選else從句
  • break 和 continue: 在循環(huán)中使用

函數(shù)

global語句

  • global語句聲明變量是全局的,當(dāng)在函數(shù)內(nèi)給賦變量的時候坪它,變化也反映在主塊中骤竹。

默認(rèn)參數(shù)

  • 只有形參表末尾的參數(shù)可以有默認(rèn)值。如def func(a, b=5)是有效的往毡,def func(a=5, b)是無效的蒙揣。

關(guān)鍵參數(shù)

  • 使用名字(關(guān)鍵字)而不是位置(默認(rèn)從左到右賦值)來給函數(shù)指定實參。如def func(a,b=2,c=3):可以這樣調(diào)用func(c=50, a=100)开瞭。有兩個好處:1. 不必?fù)?dān)心參數(shù)順序懒震。2. 可以只給我們想要的那些參數(shù)賦值

DocStrings

  • 文檔字符串的慣例是一個多行字符串,它的首行以大寫字母開始惩阶,句號結(jié)尾挎狸。第二行是空行,從第三行開始是詳細(xì)的描述断楷。
  • 可以通過func.__doc__(注意雙下劃線)得到函數(shù)的文檔字符串屬性锨匆。

模塊

簡介

  • 利用import語句輸入sys模塊
  • sys.argv包含了命令行參數(shù)的列表

字節(jié)編譯的.pyc文件

  • 使輸入模塊更快
  • 與平臺無關(guān)

from..import語句

  • 應(yīng)避免使用from..import而使用import語句,因為這樣可以使程序更易讀,也可以避免名稱的沖突恐锣。

模塊的name屬性

  • 每個Python模塊都有它的__name__茅主,如果它是'__main__',說明這個模塊被用戶單獨運(yùn)行土榴。

dir()函數(shù)

  • 可以使用內(nèi)建的dir()來列出模塊定義的標(biāo)識符诀姚,如dir(sys)。標(biāo)識符有函數(shù)玷禽、類和變量赫段。
  • 不給dir()傳遞參數(shù),默認(rèn)返回當(dāng)前模塊的屬性列表矢赁。
  • 使用del語句刪除當(dāng)前模塊中的變量/屬性糯笙。

數(shù)據(jù)結(jié)構(gòu)

列表

  • 列表是可變的數(shù)據(jù)類型
  • 列表中的項目包括在方括號中,如shoplist = ['apple', 'mango', 'carrot', 'banana']
  • 刪除用del,如del shoplist[0]

元組

  • 元組和字符串一樣是不可變的
  • 元組的項目包括在圓括號中撩银,如zoo = ('wolf', 'elephant', 'penguin')

字典

  • 鍵值對包含在花括號中给涕,如d = {key1 : value1, key2 : value2 }
  • del語句刪除鍵/值對,如del dict['key']

序列

  • 列表额获、元組和字符串都是序列
  • 索引操作符和切片操作符
    • shoplist[0]抓取第一個項目
    • shoplist[-2]抓取倒數(shù)第二個項目
    • shoplist[:]返回整個序列的拷貝
    • shoplist[:-1]返回除最后一個項目外包含所有項目的序列切片
    • 開始位置包含在序列切片中够庙,而結(jié)束位置被排斥在切片外。

引用

  • 創(chuàng)建一個對象并給它賦一個變量的時候抄邀,這個變量僅僅引用那個對象耘眨,而不是表示這個對象本身!也就是說撤摸,變量名指向你計算機(jī)中存儲那個對象的內(nèi)存毅桃。這被稱作名稱到對象的綁定。
  • 要復(fù)制一個列表或者類似的序列或者其他復(fù)雜的對象(不是如整數(shù)那樣的簡單對象)准夷,必須使用切片操作符來取得拷貝。

解決問題

  • Windows把反斜杠\作為目錄分隔符莺掠,而Python中表示轉(zhuǎn)義符衫嵌。所以Windows下路徑字符串應(yīng)使用'C:\\Documents'r'C:\Documents'
  • os.sep變量會根據(jù)操作系統(tǒng)給出目錄分隔符彻秆,即在Linux楔绞、Unix下是'/',在Windows下是'\\'唇兑,在Mac OS下是':'酒朵。使用os.sep而非直接使用字符使程序具有移植性。
  • 推薦使用zipfiletarfile創(chuàng)建歸檔扎附。不推薦使用os.system蔫耽,它容易引發(fā)嚴(yán)重的錯誤。

面向?qū)ο缶幊?/p>

  • 假如有一個類MyClass和這個類的實例MyObject留夜。調(diào)用MyObject.method(arg1, arg2)時匙铡,會由Python自動轉(zhuǎn)為MyClass.method(MyObject, arg1, arg2)图甜。
  • 方法與函數(shù)的區(qū)別只是一個額外的self變量
  • __init__方法類似于C++、C#和Java中的constructor,__del__方法與destructor的概念類似鳖眼。
  • Python中所有的類成員(包括數(shù)據(jù)成員)都是公共的黑毅,所有的方法都是有效的。
    只有一個例外:如果數(shù)據(jù)成員名稱以雙下劃線前綴钦讳,比如__privatevar矿瘦,Python的名稱管理體系會把它作為私有變量。

輸入輸出

  • 使file類的read愿卒、readline匪凡、write、close方法
  • 讀模式('r')掘猿、寫模式('w')病游、追加模式('a')
  • 使用picklecpickle模塊的dumpload方法實現(xiàn)存取對象

異常

  • 使用try..except語句來處理異常
  • 使用raise語句引發(fā)異常稠通,可以引發(fā)的錯誤或異常應(yīng)該分別是一個Error或Exception類的直接或間接導(dǎo)出類衬衬。
  • 在無論異常發(fā)生與否的情況下都執(zhí)行特定語句,使用try..finally
  • 在一個try塊下同時使用except從句和finally塊改橘,需要把一個嵌入另外一個滋尉。

標(biāo)準(zhǔn)庫

sys模塊

  • sys.argv
  • sys.version、sys.version_info
  • sys.stdin飞主、sys.stdout狮惜、sys.stderr

os模塊

  • os.name字符串指示正在使用的平臺。比如Windows是'nt'碌识,Linux/Unix是'posix'碾篡。
  • os.getcwd()得到當(dāng)前Python腳本工作的目錄路徑。
  • os.getenv()和os.putenv()分別用來讀取和設(shè)置環(huán)境變量筏餐。
  • os.listdir()返回指定目錄下的所有文件和目錄名开泽。
  • os.remove()用來刪除一個文件。
  • os.system()用來運(yùn)行shell命令魁瞪。
  • os.linesep字符串給出當(dāng)前平臺使用的行終止符穆律。如Windows使用'\r\n',Linux使用'\n'导俘,而Mac使用'\r'峦耘。
  • os.path.split()函數(shù)返回一個路徑的目錄名和文件名。
  • os.path.isfile()和os.path.isdir()分別檢驗給出的路徑是文件還是目錄旅薄。
  • os.path.exists()檢驗給出的路徑是否真地存在辅髓。

更多

特殊的方法

  • 特殊的方法都被用來模仿某個行為。例如,想要為類使用x[key]這樣的索引操作(就像列表和元組一樣)利朵,只需要實現(xiàn)__getitem__()方法就可以律想。在《Python參考手冊》中可以找到所有的特殊方法。

單語句塊

  • 語句塊通過縮進(jìn)層次與其它塊區(qū)分開绍弟。但如果語句塊只包含一條語句技即,可以在條件語句或循環(huán)語句的同一行指明它。但這種寫法不推薦使用樟遣。
if True: print('YES')

列表綜合

  • 通過列表綜合而叼,可以從一個已有的列表導(dǎo)出一個新的列表。
#!/usr/bin/python
# Filename: list_comprehension.py
listone = [2, 3, 4]
listtwo = [2*i for i in listone if i > 2]
print listtwo           # [6,8]

在函數(shù)中接收元組和列表

  • 在args變量前有*前綴豹悬,所有多余的函數(shù)參數(shù)都會作為一個元組存儲在args中葵陵。如果使用的是**前綴,多余的參數(shù)會被認(rèn)為是一個字典的鍵/值對瞻佛。
    def powersum(power, *args):
        total = 0
        for i in args:
            total += pow(i, power)
        return total
    
    print powersum(3,2,1)   # 9
    print powersum(3,10)    # 1000

lambda語句

  • lambda需要一個參數(shù)脱篙,后面僅跟單個表達(dá)式作為函數(shù)體,而表達(dá)式的值被這個新建的函數(shù)返回伤柄。注意绊困,即便是print語句也不能用在lambda形式中,只能使用表達(dá)式适刀。
    def make_repeater(n):
        return lambda s: s*n

    twice = make_repeater(2)

    print twice('word')     # wordword
    print twice(5)          # 10

exec語句

  • exec用來執(zhí)行儲存在字符串或文件中的語句
    exec 'print "Hello World"'

eval語句

  • eval用來計算存儲在字符串中的有效表達(dá)式
    eval('2*3')

assert語句

  • assert用來聲明某個條件是真的秤朗,非真的時候引發(fā)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 

repr函數(shù)

  • repr函數(shù)用來取得對象的規(guī)范字符串表示笔喉。反引號(也稱轉(zhuǎn)換符)可以完成相同的功能取视。注意,在大多數(shù)時候有eval(repr(object)) == object常挚∽魈罚可以通過定義類的__repr__方法來控制對象在被repr函數(shù)調(diào)用的時候返回的內(nèi)容。
    >>> i = []
    >>> i.append('item')
    >>> `i`
    "['item']"
    >>> repr(i)
    "['item']"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末待侵,一起剝皮案震驚了整個濱河市丢早,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秧倾,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件傀缩,死亡現(xiàn)場離奇詭異那先,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)赡艰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進(jìn)店門售淡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事揖闸∽岫椋” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵汤纸,是天一觀的道長衩茸。 經(jīng)常有香客問我,道長贮泞,這世上最難降的妖魔是什么楞慈? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮啃擦,結(jié)果婚禮上囊蓝,老公的妹妹穿的比我還像新娘。我一直安慰自己令蛉,他們只是感情好聚霜,可當(dāng)我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著珠叔,像睡著了一般蝎宇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上运杭,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天夫啊,我揣著相機(jī)與錄音,去河邊找鬼辆憔。 笑死撇眯,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的虱咧。 我是一名探鬼主播熊榛,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼腕巡!你這毒婦竟也來了玄坦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤绘沉,失蹤者是張志新(化名)和其女友劉穎煎楣,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體车伞,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡择懂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了另玖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片困曙。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡表伦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出慷丽,到底是詐尸還是另有隱情蹦哼,我是刑警寧澤,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布要糊,位于F島的核電站纲熏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏杨耙。R本人自食惡果不足惜赤套,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望珊膜。 院中可真熱鬧容握,春花似錦、人聲如沸车柠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竹祷。三九已至谈跛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間塑陵,已是汗流浹背感憾。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留令花,地道東北人阻桅。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像兼都,于是被迫代替她去往敵國和親嫂沉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容