Python 3 教程html
http://www.runoob.com/python3/python3-tutorial.htmlpython
- Python的3.0版本,常被稱爲Python 3000,或簡稱Py3k。相對於Python的早期版本,這是一個較大的升級。爲了避免帶入過多的累贅,Python 3.0在設計的時候沒有考慮向下兼容。Python 是一個高層次的結合瞭解釋性、編譯性、互動性和麪向對象的腳本語言。
- Python 是一種解釋型語言: 這意味着開發過程當中沒有了編譯這個環節。相似於PHP和Perl語言。
- Python 是交互式語言: 這意味着,您能夠在一個Python提示符,直接互動執行寫你的程序。
- $ chmod +x test.py # 腳本文件添加可執行權限
- 在 Python 中,全部標識符能夠包括英文、數字以及下劃線(_),但不能以數字開頭。
- 如下劃線開頭的標識符是有特殊意義的。以單下劃線開頭 _foo 的表明不能直接訪問的類屬性,需經過類提供的接口進行訪問,不能用 from xxx import * 而導入;
- 以雙下劃線開頭的 __foo 表明類的私有成員;
- 以雙下劃線開頭和結尾的 __foo__ 表明 Python 裏特殊方法專用的標識,如 __init__() 表明類的構造函數。
- Python 能夠同一行顯示多條語句,方法是用分號 ; 分開。
- 學習 Python 與其餘語言最大的區別就是,Python 的代碼塊不使用大括號 {} 來控制類,函數以及其餘邏輯判斷。python 最具特點的就是用縮進來寫模塊。
- Python語句中通常以新行做爲爲語句的結束符。可是咱們可使用斜槓( \)將一行的語句分爲多行顯示。語句中包含 [], {} 或 () 括號就不須要使用多行鏈接符。
- Python 的標準庫提供了一個 keyword 模塊,能夠輸出當前版本的全部關鍵字
- python中單行註釋採用 # 開頭。註釋能夠在語句或表達式行末。python 中多行註釋使用三個單引號(''')或三個雙引號(""")。
- print 默認輸出是換行的,若是要實現不換行須要在變量末尾加上 end="":
- 縮進相同的一組語句構成一個代碼塊,咱們稱之代碼組。像if、while、def和class這樣的複合語句,首行以關鍵字開始,以冒號( : )結束,該行以後的一行或多行代碼構成代碼組。咱們將首行及後面的代碼組稱爲一個子句(clause)
- Python 中的變量賦值不須要類型聲明。每一個變量在內存中建立,都包括變量的標識,名稱和數據這些信息。每一個變量在使用前都必須賦值,變量賦值之後該變量纔會被建立。
- Python容許你同時爲多個變量賦值。您也能夠爲多個對象指定多個變量。
- Python有五個標準的數據類型:Numbers(數字),String(字符串),List(列表),Tuple(元組),Dictionary(字典)
- 他們是不可改變的數據類型,這意味着改變數字數據類型會分配一個新的對象。當你指定一個值時,Number對象就會被建立。您能夠經過使用del語句刪除單個或多個對象的引用。
- Python支持四種不一樣的數字類型:int(有符號整型),long(長整型[也能夠表明八進制和十六進制]),float(浮點型),complex(複數)
- python的字串列表有2種取值順序:從左到右索引默認0開始的,最大範圍是字符串長度少1;從右到左索引默認-1開始的,最大範圍是字符串開頭
- 若是你要實現從字符串中獲取一段子字符串的話,可使用變量 [頭下標:尾下標],就能夠截取相應的字符串,其中下標是從 0 開始算起,能夠是正數或負數,下標能夠爲空表示取到頭或尾。
- 當使用以冒號分隔的字符串,python返回一個新的對象,結果包含了以這對偏移標識的連續的內容,左邊的開始是包含了下邊界。而取到的最大範圍不包括上邊界。
- 加號(+)是字符串鏈接運算符,星號(*)是重複操做。
- List(列表) 是 Python 中使用最頻繁的數據類型。列表能夠完成大多數集合類的數據結構實現。它支持字符,數字,字符串甚至能夠包含列表(即嵌套)。列表用 [ ] 標識,是 python 最通用的複合數據類型。
- 元組是另外一個數據類型,相似於List(列表)。元組用"()"標識。內部元素用逗號隔開。可是元組不能二次賦值,至關於只讀列表。
- 字典(dictionary)是除列表之外python之中最靈活的內置數據結構類型。列表是有序的對象結合,字典是無序的對象集合。二者之間的區別在於:字典當中的元素是經過鍵來存取的,而不是經過偏移存取。字典用"{ }"標識。字典由索引(key)和它對應的值value組成。
- 有時候,咱們須要對數據內置的類型進行轉換,數據類型的轉換,你只須要將數據類型做爲函數名便可。
- ** 冪 - 返回x的y次冪
- // 取整除 - 返回商的整數部分
- 注意:Python2.x 裏,整數除整數,只能得出整數。若是要獲得小數部分,把其中一個數改爲浮點數便可。Python3.x裏,則都獲得小數部分。
- **= 冪賦值運算符 c **= a 等效於 c = c ** a
- //= 取整除賦值運算符 c //= a 等效於 c = c // a
- and x and y 布爾"與" - 若是 x 爲 False,x and y 返回 False,不然它返回 y 的計算值。E.g. (a and b) 返回 20。
- or x or y 布爾"或" - 若是 x 是非 0,它返回 x 的值,不然它返回 y 的計算值。 E.g. (a or b) 返回 10。
- in 若是在指定的序列中找到值返回 True,不然返回 False。 x 在 y 序列中 , 若是 x 在 y 序列中返回 True。
- not in 若是在指定的序列中沒有找到值返回 True,不然返回 False。 x 不在 y 序列中 , 若是 x 不在 y 序列中返回 True。
- 身份運算符用於比較兩個對象的存儲單元。注: id() 函數用於獲取對象內存地址。
- is 是判斷兩個標識符是否是引用自一個對象 x is y, 相似 id(x) == id(y) , 若是引用的是同一個對象則返回 True,不然返回 False
- is not 是判斷兩個標識符是否是引用自不一樣對象 x is not y , 相似 id(a) != id(b)。若是引用的不是同一個對象則返回結果 True,不然返回 False。
- is 與 == 區別:is 用於判斷兩個變量引用對象是否爲同一個, == 用於判斷引用變量的值是否相等。
- Python Number 數據類型用於存儲數值。數據類型是不容許改變的,這就意味着若是改變 Number 數據類型的值,將從新分配內存空間。
- 您也可使用del語句刪除一些 Number 對象引用。
- 您能夠經過使用del語句刪除單個或多個對象
- Python 支持三種不一樣的數值類型:整型(Int),浮點型(floating point real values),複數(complex numbers)
- Python3整型是沒有限制大小的,能夠看成Long類型使用,因此Python3沒有Python2的Long類型。
- ceil 函數返回數字的上入整數。它不能直接訪問,須要import math模塊,經過靜態對象調用該方法。
- floor函數返回數字的下舍整數。
- max函數返回給定參數的最大值,參數能夠爲序列。min函數則返回最小值。
- choice函數返回一個列表,元組或字符串的隨機項。須要import random。
- randrange函數返回指定遞增基數集合中的一個隨機數,基數缺省值爲1。
- random函數返回隨機的一個實數,它在[0, 1)範圍內。
- shuffle函數將序列的全部元素隨機排序。
- uniform函數將隨機生成下一個實數,它在[x, y)範圍內。
- Python不支持單字符類型,單字符也在Python也是做爲一個字符串使用。Python訪問子字符串,可使用方括號來截取字符串。
- 反斜槓(\)轉義字符在行尾時,爲續行符。
- 在 Python 中,字符串格式化使用與 C 中 sprintf 函數同樣的語法。
- python三引號容許一個字符串跨多行,字符串中能夠包含換行符、製表符以及其餘特殊字符。
- 三引號讓程序員從引號和特殊字符串的泥潭裏面解脫出來,自始至終保持一小塊字符串的格式是所謂的WYSIWYG(所見即所得)格式的。一個典型的用例是,當你須要一塊HTML或者SQL時,這時用字符串組合,特殊字符串轉義將會很是的繁瑣。
- 引號前小寫的"u"表示這裏建立的是一個 Unicode 字符串。若是你想加入一個特殊字符,可使用 Python 的 Unicode-Escape 編碼。
- Python capitalize()將字符串的第一個字母變成大寫,其餘字母變小寫。對於 8 位字節編碼須要根據本地環境。
- Python center() 返回一個原字符串居中,並使用空格填充至長度 width 的新字符串。默認填充字符爲空格。
- Python count() 方法用於統計字符串裏某個字符出現的次數。可選參數爲在字符串搜索的開始與結束位置。
- Python3 中沒有 decode 方法,但咱們可使用 bytes 對象的 decode() 方法來解碼給定的 bytes 對象,這個 bytes 對象能夠由 str.encode() 來編碼返回。
- Python encode() 方法以 encoding 指定的編碼格式編碼字符串。errors參數能夠指定不一樣的錯誤處理方案。
- Python endswith() 方法用於判斷字符串是否以指定後綴結尾,若是以指定後綴結尾返回True,不然返回False。可選參數"start"與"end"爲檢索字符串的開始與結束位置。
- Python expandtabs() 方法把字符串中的 tab 符號('\t')轉爲空格,tab 符號('\t')默認的空格數是 8。
- Python find() 方法檢測字符串中是否包含子字符串 str ,若是指定 beg(開始) 和 end(結束) 範圍,則檢查是否包含在指定範圍內,若是包含子字符串返回開始的索引值,不然返回-1。
- Python2.6 開始,新增了一種格式化字符串的函數 str.format(),它加強了字符串格式化的功能。基本語法是經過 {} 和 : 來代替之前的 % 。format 函數能夠接受不限個參數,位置能夠不按順序。
- Python index() 方法檢測字符串中是否包含子字符串 str ,該方法與 python find()方法同樣,只不過若是str不在 string中會報一個異常。
- Python isalnum() 方法檢測字符串是否由字母和數字組成。
- Python isalpha() 方法檢測字符串是否只由字母組成。
- Python isdecimal() 方法檢查字符串是否只包含十進制字符。這種方法只存在於unicode對象。注意:定義一個十進制字符串,只須要在字符串前添加 'u' 前綴便可。
- Python isdigit() 方法檢測字符串是否只由數字組成。
- Python islower() 方法檢測字符串是否由小寫字母組成。
- Python isnumeric() 方法檢測字符串是否只由數字組成。這種方法是隻針對unicode對象。
- Python isspace() 方法檢測字符串是否只由空格組成。
- Python istitle() 方法檢測字符串中全部的單詞拼寫首字母是否爲大寫,且其餘字母爲小寫。
- Python isupper() 方法檢測字符串中全部的字母是否都爲大寫。
- Python join() 方法用於將序列中的元素以指定的字符鏈接生成一個新的字符串。
- Python len() 方法返回對象(字符、列表、元組等)長度或項目個數。
- Python ljust() 方法返回一個原字符串左對齊,並使用空格填充至指定長度的新字符串。若是指定的長度小於原字符串的長度則返回原字符串。
- Python lower() 方法轉換字符串中全部大寫字符爲小寫。
- Python lstrip() 方法用於截掉字符串左邊的空格或指定字符。
- maketrans() 方法用於建立字符映射的轉換表,對於接受兩個參數的最簡單的調用方式,第一個參數是字符串,表示須要轉換的字符,第二個參數也是字符串表示轉換的目標。兩個字符串的長度必須相同,爲一一對應的關係。注:Python3.4已經沒有string.maketrans()了,取而代之的是內建函數: bytearray.maketrans()、bytes.maketrans()、str.maketrans()
- Python max() 方法返回字符串中最大的字母。
- Python min() 方法返回字符串中最小的字母。
- partition() 方法用來根據指定的分隔符將字符串進行分割。若是字符串包含指定的分隔符,則返回一個3元的元組,第一個爲分隔符左邊的子串,第二個爲分隔符自己,第三個爲分隔符右邊的子串。
- Python replace() 方法把字符串中的 old(舊字符串) 替換成 new(新字符串),若是指定第三個參數max,則替換不超過 max 次。
- Python rfind() 返回字符串最後一次出現的位置(從右向左查詢),若是沒有匹配項則返回-1。
- Python rindex() 返回子字符串 str 在字符串中最後出現的位置,若是沒有匹配的字符串會報異常,你能夠指定可選參數[beg:end]設置查找的區間。
- Python rjust() 返回一個原字符串右對齊,並使用空格填充至長度 width 的新字符串。若是指定的長度小於字符串的長度則返回原字符串。
- rpartition相似於 partition()函數,不過是從右邊開始查找
- Python rstrip() 刪除 string 字符串末尾的指定字符(默認爲空格).
- Python split()經過指定分隔符對字符串進行切片,若是參數num 有指定值,則僅分隔 num 個子字符串
- Python splitlines() 按照行('\r', '\r\n', \n')分隔,返回一個包含各行做爲元素的列表,若是參數 keepends 爲 False,不包含換行符,若是爲 True,則保留換行符。
- Python startswith() 方法用於檢查字符串是不是以指定子字符串開頭,若是是則返回 True,不然返回 False。若是參數 beg 和 end 指定值,則在指定範圍內檢查。
- Python strip() 方法用於移除字符串頭尾指定的字符(默認爲空格)。
- Python swapcase() 方法用於對字符串的大小寫字母進行轉換。
- Python title() 方法返回"標題化"的字符串,就是說全部單詞都是以大寫開始,其他字母均爲小寫(見 istitle())。
- Python translate() 方法根據參數table給出的表(包含 256 個字符)轉換字符串的字符, 要過濾掉的字符放到 del 參數中。
- Python upper() 方法將字符串中的小寫字母轉爲大寫字母。
- Python zfill() 方法返回指定長度的字符串,原字符串右對齊,前面填充0。
- Python isdecimal() 方法檢查字符串是否只包含十進制字符。這種方法只存在於unicode對象。
- 序列是Python中最基本的數據結構。序列中的每一個元素都分配一個數字 - 它的位置,或索引,第一個索引是0,第二個索引是1,依此類推。
- Python有6個序列的內置類型,但最多見的是列表和元組。
- 序列均可以進行的操做包括索引,切片,加,乘,檢查成員。
- 此外,Python已經內置肯定序列的長度以及肯定最大和最小的元素的方法。
- Python 的元組與列表相似,不一樣之處在於元組的元素不能修改。
- 元組使用小括號,列表使用方括號。
- 元組建立很簡單,只須要在括號中添加元素,並使用逗號隔開便可。
- 元組中只包含一個元素時,須要在元素後面添加逗號,不然括號會被看成運算符使用
- 元組中的元素值是不容許修改的,但咱們能夠對元組進行鏈接組合
- 元組中的元素值是不容許刪除的,但咱們可使用del語句來刪除整個元組
- tuple(seq)函數將列表轉換爲元組。
- 字典是另外一種可變容器模型,且可存儲任意類型對象。字典的每一個鍵值(key=>value)對用冒號(:)分割,每一個對之間用逗號(,)分割,整個字典包括在花括號({})中
- 鍵必須是惟一的,但值則沒必要。值能夠取任何數據類型,但鍵必須是不可變的,如字符串,數字或元組。
- 不容許同一個鍵出現兩次。建立時若是同一個鍵被賦值兩次,後一個值會被記住
- 鍵必須不可變,因此能夠用數字,字符串或元組充當,而用列表就不行
- str(dict)函數輸出字典,以可打印的字符串表示。
- type(variable)函數返回輸入的變量類型,若是變量是字典就返回字典類型。
- 直接賦值:其實就是對象的引用(別名)。
- 淺拷貝(copy):拷貝父對象,不會拷貝對象的內部的子對象。
- 深拷貝(deepcopy): copy 模塊的 deepcopy 方法,徹底拷貝了父對象及其子對象。
- 複合賦值:右邊的表達式會在賦值變更以前執行。右邊表達式的執行順序是從左往右的。
- 關鍵字end能夠用於將結果輸出到同一行,或者在輸出的末尾添加不一樣的字符
- 其中"判斷條件"成立時(非零),則執行後面的語句,而執行內容能夠多行,以縮進來區分表示同一範圍。
- 因爲 python 並不支持 switch 語句,因此多個條件判斷,只能用 elif 來實現
- 你也能夠在同一行的位置上使用if條件判斷語句
- 判斷條件能夠是任何表達式,任何非零、或非空(null)的值均爲true。
- 若是你須要遍歷數字序列,可使用內置range()函數。它會生成數列;你也可使用range指定區間的值;也可使range以指定數字開始並指定不一樣的增量(甚至能夠是負數,有時這也叫作'步長');您能夠結合range()和len()函數以遍歷一個序列的索引;還可使用range()函數來建立一個列表
- while … else 在循環條件爲 false 時執行 else 語句塊
- 另一種執行循環的遍歷方式是經過索引
- 在 python 中,for … else 表示這樣的意思,for 中的語句和普通的沒有區別,else 中的語句會在循環正常執行完(即 for 不是經過 break 跳出而中斷的)的狀況下執行,while … else 也是同樣。
- Python pass是空語句,是爲了保持程序結構的完整性。pass 不作任何事情,通常用作佔位語句。
- 迭代是Python最強大的功能之一,是訪問集合元素的一種方式。迭代器是一個能夠記住遍歷的位置的對象。迭代器對象從集合的第一個元素開始訪問,直到全部的元素被訪問完結束。迭代器只能往前不會後退。迭代器有兩個基本的方法:iter() 和 next()。字符串,列表或元組對象均可用於建立迭代器
- 在 Python 中,使用了 yield 的函數被稱爲生成器(generator)。跟普通函數不一樣的是,生成器是一個返回迭代器的函數,只能用於迭代操做,更簡單點理解生成器就是一個迭代器。在調用生成器運行的過程當中,每次遇到 yield 時函數會暫停並保存當前全部的運行信息,返回yield的值。並在下一次執行 next()方法時從當前位置繼續運行。
- 函數代碼塊以 def 關鍵詞開頭,後接函數標識符名稱和圓括號 ()。函數的第一行語句能夠選擇性地使用文檔字符串—用於存放函數說明。return [表達式] 結束函數,選擇性地返回一個值給調用方。不帶表達式的return至關於返回 None。
- 在 python 中,strings, tuples, 和 numbers 是不可更改的對象,而 list,dict 等則是能夠修改的對象。
- 不可變類型:變量賦值 a=5 後再賦值 a=10,這裏實際是新生成一個 int 值對象 10,再讓 a 指向它,而 5 被丟棄,不是改變a的值,至關於新生成了a。
- 可變類型:變量賦值 la=[1,2,3,4] 後再賦值 la[2]=5 則是將 list la 的第三個元素值更改,自己la沒有動,只是其內部的一部分值被修改了。
- python 函數的參數傳遞:python 中一切都是對象,嚴格意義咱們不能說值傳遞仍是引用傳遞,咱們應該說傳不可變對象和傳可變對象。如下是調用函數時可以使用的正式參數類型:必需參數/關鍵字參數/默認參數/不定長參
- 不可變類型:相似 c++ 的值傳遞,如 整數、字符串、元組。如fun(a),傳遞的只是a的值,沒有影響a對象自己。好比在 fun(a)內部修改 a 的值,只是修改另外一個複製的對象,不會影響 a 自己。
- 可變類型:相似 c++ 的引用傳遞,如 列表,字典。如 fun(la),則是將 la 真正的傳過去,修改後fun外部的la也會受影響
- 必需參數須以正確的順序傳入函數。調用時的數量必須和聲明時的同樣。
- 使用關鍵字參數容許函數調用時參數的順序與聲明時不一致,由於 Python 解釋器可以用參數名匹配參數值。
- 你可能須要一個函數能處理比當初聲明時更多的參數。這些參數叫作不定長參數,和上述2種參數不一樣,聲明時不會命名。加了星號(*)的變量名會存放全部未命名的變量參數。若是在函數調用時沒有指定參數,它就是一個空元組。咱們也能夠不向函數傳遞未命名的變量。
- python 使用 lambda 來建立匿名函數。所謂匿名,意即再也不使用 def 語句這樣標準的形式定義一個函數。
- lambda 只是一個表達式,函數體比 def 簡單不少。
- lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。
- lambda 函數擁有本身的命名空間,且不能訪問本身參數列表以外或全局命名空間裏的參數。
- 雖然lambda函數看起來只能寫一行,卻不等同於C或C++的內聯函數,後者的目的是調用小函數時不佔用棧內存從而增長運行效率。
- Python的做用域一共有4種,分別是:以 L –> E –> G –>B 的規則查找,即:在局部找不到,便會去局部外的局部找(例如閉包),再找不到就會去全局找,再者去內建中找。Python 中只有模塊(module),類(class)以及函數(def、lambda)纔會引入新的做用域,其它的代碼塊(如 if/elif/else/、try/except、for/while等)是不會引入新的做用域的,也就是說這這些語句內定義的變量,外部也能夠訪問
- L (Local) 局部做用域
- E (Enclosing) 閉包函數外的函數中
- G (Global) 全局做用域
- B (Built-in) 內建做用域
- 當內部做用域想修改外部做用域的變量時,就要用到global和nonlocal關鍵字了。
- 若是要修改嵌套做用域(enclosing 做用域,外層非全局做用域)中的變量則須要 nonlocal 關鍵字了
- Python中列表是可變的,這是它區別於字符串和元組的最重要的特色,一句話歸納即:列表能夠修改,而字符串和元組不能。
- 列表是最經常使用的Python數據類型,它能夠做爲一個方括號內的逗號分隔值出現。
- 列表的數據項不須要具備相同的類型
- 建立一個列表,只要把逗號分隔的不一樣的數據項使用方括號括起來便可。
- 你能夠對列表的數據項進行修改或更新,你也可使用append()方法來添加列表項
- 可使用 del 語句來刪除列表的的元素
- 列表對 + 和 * 的操做符與字符串類似。+ 號用於組合列表,* 號用於重複列表。
- 使用嵌套列表即在列表裏建立其它列表
- list() 方法用於將元組轉換爲列表。注:元組與列表是很是相似的,區別在於元組的元素值不能修改,元組是放在括號中,列表是放於方括號中。
- extend() 函數用於在列表末尾一次性追加另外一個序列中的多個值(用新列表擴展原來的列表)。
- clear() 函數用於清空列表,相似於 del a[:]。
- copy() 函數返回列表的淺複製,相似於 a[:]。
- list.insert(i, x)在指定位置插入一個元素。第一個參數是準備插入到其前面的那個元素的索引,例如 a.insert(0, x) 會插入到整個列表以前,而 a.insert(len(a), x) 至關於 a.append(x) 。
- list.index(x)返回列表中第一個值爲 x 的元素的索引。若是沒有匹配的元素就會返回一個錯誤。
- list.count(x) 返回 x 在列表中出現的次數。
- list.copy() 返回列表的淺複製,等於a[:]。
- 列表方法使得列表能夠很方便的做爲一個堆棧來使用,堆棧做爲特定的數據結構,最早進入的元素最後一個被釋放(後進先出)。用 append() 方法能夠把一個元素添加到堆棧頂。用不指定索引的 pop() 方法能夠把一個元素從堆棧頂釋放出來。
- 也能夠把列表當作隊列用,只是在隊列裏第一加入的元素,第一個取出來;可是拿列表用做這樣的目的效率不高。在列表的最後添加或者彈出元素速度快,然而在列表裏插入或者從頭部彈出速度卻不快(由於全部其餘的元素都得一個一個地移動)。
- 列表推導式提供了從序列建立列表的簡單途徑。一般應用程序將一些操做應用於某個序列的每一個元素,用其得到的結果做爲生成新列表的元素,或者根據肯定的斷定條件建立子序列。
- 每一個列表推導式都在 for 以後跟一個表達式,而後有零到多個 for 或 if 子句。返回結果是一個根據表達從其後的 for 和 if 上下文環境中生成出來的列表。若是但願表達式推導出一個元組,就必須使用括號。
- 使用 del 語句能夠從一個列表中依索引而不是值來刪除一個元素。這與使用 pop() 返回一個值不一樣。能夠用 del 語句從列表中刪除一個切割,或清空整個列表(咱們之前介紹的方法是給該切割賦一個空列表)。
- 元組在輸出時老是有括號的,以便於正確表達嵌套結構。在輸入時可能有或沒有括號, 不過括號一般是必須的(若是元組是更大的表達式的一部分)
- 集合是一個無序不重複元素的集。基本功能包括關係測試和消除重複元素。能夠用大括號({})建立集合。注意:若是要建立一個空集合,你必須用 set() 而不是 {} ;後者建立一個空的字典。
- 序列是以連續的整數爲索引,與此不一樣的是,字典以關鍵字爲索引,關鍵字能夠是任意不可變類型,一般用字符串或數值。理解字典的最佳方式是把它看作無序的鍵=>值對集合。在同一個字典以內,關鍵字必須是互不相同。
- 一對大括號建立一個空的字典:{}。
- 構造函數 dict() 直接從鍵值對元組列表中構建字典。若是有固定的模式,列表推導式指定特定的鍵值對。此外,字典推導能夠用來建立任意鍵和值的表達式詞典。若是關鍵字只是簡單的字符串,使用關鍵字參數指定鍵值對有時候更方便。
- 在字典中遍歷時,關鍵字和對應的值可使用 items() 方法同時解讀出來。
- 在序列中遍歷時,索引位置和對應值可使用 enumerate() 函數同時獲得。
- 同時遍歷兩個或更多的序列,可使用 zip() 組合。
- 要反向遍歷一個序列,首先指定這個序列,而後調用 reversed() 函數。
- 要按順序遍歷一個序列,使用 sorted() 函數返回一個已排序的序列,並不修改原值。
- Python 提供了一個辦法,把這些定義存放在文件中,爲一些腳本或者交互式的解釋器實例使用,這個文件被稱爲模塊。模塊是一個包含全部你定義的函數和變量的文件,其後綴名是.py。模塊能夠被別的程序引入,以使用該模塊中的函數等功能。這也是使用 python 標準庫的方法。
- 想使用 Python 源文件,只需在另外一個源文件裏執行 import 語句。當解釋器遇到 import 語句,若是模塊在當前的搜索路徑就會被導入。搜索路徑是一個解釋器會先進行搜索的全部目錄的列表。如想要導入模塊 support,須要把命令放在腳本的頂端。一個模塊只會被導入一次,無論你執行了多少次import。這樣能夠防止導入模塊被一遍又一遍地執行。
- Python的搜索路徑是由一系列目錄名組成的,Python解釋器就依次從這些目錄中去尋找所引入的模塊。這看起來很像環境變量,事實上,也能夠經過定義環境變量的方式來肯定搜索路徑。搜索路徑是在Python編譯或安裝的時候肯定的,安裝新的庫應該也會修改。搜索路徑被存儲在sys模塊中的path變量。sys.path 輸出是一個列表,其中第一項是空串'',表明當前目錄(如果從一個腳本中打印出來的話,能夠更清楚地看出是哪一個目錄),亦即咱們執行python解釋器的目錄(對於腳本的話就是運行的腳本所在的目錄)。所以若像我同樣在當前目錄下存在與要引入模塊同名的文件,就會把要引入的模塊屏蔽掉。瞭解了搜索路徑的概念,就能夠在腳本中修改sys.path來引入一些不在搜索路徑中的模塊。
- 在 python 用 import 或者 from...import 來導入相應的模塊。
- 將整個模塊(somemodule)導入,格式爲: import somemodule
- 從某個模塊中導入某個函數,格式爲: from somemodule import somefunction
- 從某個模塊中導入多個函數,格式爲: from somemodule import firstfunc, secondfunc, thirdfunc
- 將某個模塊中的所有函數導入,格式爲: from somemodule import *
- 模塊除了方法定義,還能夠包括可執行的代碼。這些代碼通常用來初始化這個模塊。這些代碼只有在第一次被導入時纔會被執行。每一個模塊有各自獨立的符號表,在模塊內部爲全部的函數看成全局符號表來使用。因此,模塊的做者能夠放心大膽的在模塊內部使用這些全局變量,而不用擔憂把其餘用戶的全局變量搞花。
- 一個模塊被另外一個程序第一次引入時,其主程序將運行。若是咱們想在模塊被引入時,模塊中的某一程序塊不執行,咱們能夠用__name__屬性來使該程序塊僅在該模塊自身運行時執行。
- 內置的函數 dir() 能夠找到模塊內定義的全部名稱。若是沒有給定參數,那麼 dir() 函數會羅列出當前定義的全部名稱。
- 包是一種管理 Python 模塊命名空間的形式,採用"點模塊名稱"。好比一個模塊的名稱是 A.B, 那麼他表示一個包 A中的子模塊 B 。就好像使用模塊的時候,你不用擔憂不一樣模塊之間的全局變量相互影響同樣,採用點模塊名稱這種形式也不用擔憂不一樣庫之間的模塊重名的狀況。
- 在導入一個包的時候,Python 會根據 sys.path 中的目錄來尋找這個包中包含的子目錄。目錄只有包含一個叫作 __init__.py 的文件纔會被認做是一個包,主要是爲了不一些濫俗的名字(好比叫作 string)不當心的影響搜索路徑中的有效模塊。最簡單的狀況,放一個空的 :file:__init__.py就能夠了。固然這個文件中也能夠包含一些初始化代碼或者爲(將在後面介紹的) __all__變量賦值。
- 用戶能夠每次只導入一個包裏面的特定模塊
- 注意當使用from package import item這種形式的時候,對應的item既能夠是包裏面的子模塊(子包),或者包裏面定義的其餘名稱,好比函數,類或者變量。import語法會首先把item看成一個包定義的名稱,若是沒找到,再試圖按照一個模塊去導入。若是還沒找到,恭喜,一個:exc:ImportError 異常被拋出了。反之,若是使用形如import item.subitem.subsubitem這種導入形式,除了最後一項,都必須是包,而最後一項則能夠是模塊或者是包,可是不能夠是類,函數或者變量的名字。
- 若是咱們使用 from sound.effects import *,Python 會進入文件系統,找到這個包裏面全部的子模塊,一個一個的把它們都導入進來。可是很不幸,這個方法在 Windows平臺上工做的就不是很是好,由於Windows是一個大小寫不區分的系統。在這類平臺上,沒有人敢擔保一個叫作 ECHO.py 的文件導入爲模塊 echo 仍是 Echo 甚至 ECHO。
- 爲了解決這個問題,只能煩勞包做者提供一個精確的包的索引了。導入語句遵循以下規則:若是包定義文件 __init__.py 存在一個叫作 __all__ 的列表變量,那麼在使用 from package import * 的時候就把這個列表中的全部名字做爲包內容導入。做爲包的做者,可別忘了在更新包以後保證 __all__ 也更新了啊。
- Python兩種輸出值的方式: 表達式語句和 print() 函數。第三種方式是使用文件對象的 write() 方法,標準輸出文件能夠用 sys.stdout 引用。若是你但願輸出的形式更加多樣,可使用 str.format() 函數來格式化輸出值。若是你但願將輸出的值轉成字符串,可使用 repr() 或 str() 函數來實現。
- str():函數返回一個用戶易讀的表達形式。repr():產生一個解釋器易讀的表達形式。
- 字符串對象的 rjust() 方法, 能夠將字符串靠右, 並在左邊填充空格。還有相似的方法, 如 ljust() 和 center()。 這些方法並不會寫任何東西, 它們僅僅返回新的字符串。另外一個方法 zfill(), 它會在數字的左邊填充 0。
- str.format() 的基本使用以下:% 操做符也能夠實現字符串格式化。它將左邊的參數做爲相似 sprintf() 式的格式化字符串, 而將右邊的代入, 而後返回格式化後的字符串。由於 str.format() 比較新的函數, 大多數的 Python 代碼仍然使用 % 操做符。可是由於這種舊式的格式化最終會從該語言中移除, 應該更多的使用 str.format()。Python提供了 input() 置函數從標準輸入讀入一行文本,默認的標準輸入是鍵盤。input 能夠接收一個Python表達式做爲輸入,並將運算結果返回。
- 括號及其裏面的字符 (稱做格式化字段) 將會被 format() 中的參數替換。在括號中的數字用於指向傳入對象在 format() 中的位置。
- 若是在 format() 中使用了關鍵字參數, 那麼它們的值會指向使用該名字的參數。位置及關鍵字參數能夠任意的結合。
- '!a' (使用 ascii()), '!s' (使用 str()) 和 '!r' (使用 repr()) 能夠用於在格式化某個值以前對其進行轉化。
- 可選項 ':' 和格式標識符能夠跟着字段名。 這就容許對值進行更好的格式化。在 ':' 後傳入一個整數, 能夠保證該域至少有這麼多的寬度。 用於美化表格時頗有用。
- 若是你有一個很長的格式化字符串, 而你不想將它們分開, 那麼在格式化時經過變量名而非位置會是很好的事情。最簡單的就是傳入一個字典, 而後使用方括號 '[]' 來訪問鍵值,也能夠經過在 table 變量前使用 '**' 來實現相同的功能。
- open() 將會返回一個 file 對象,基本語法格式以下:open(filename, mode)。爲了讀取一個文件的內容,調用 f.read(size), 這將讀取必定數目的數據, 而後做爲字符串或字節對象返回。size 是一個可選的數字類型的參數。當 size 被忽略了或者爲負, 那麼該文件的全部內容都將被讀取而且返回。f.readline() 會從文件中讀取單獨的一行。換行符爲 '\n'。f.readline() 若是返回一個空字符串, 說明已經已經讀取到最後一行。
- filename:filename 變量是一個包含了你要訪問的文件名稱的字符串值。
- mode:mode決定了打開文件的模式:只讀,寫入,追加等。全部可取值見以下的徹底列表。這個參數是非強制的,默認文件訪問模式爲只讀(r)。
- f.readlines() 將返回該文件中包含的全部行。若是設置可選參數 sizehint, 則讀取指定長度的字節, 而且將這些字節按行分割。另外一種方式是迭代一個文件對象而後讀取每行。
- f.write(string) 將 string 寫入到文件中, 而後返回寫入的字符數。若是要寫入一些不是字符串的東西, 那麼將須要先進行轉換。
- f.tell() 返回文件對象當前所處的位置, 它是從文件開頭開始算起的字節數。
- 若是要改變文件當前的位置, 可使用 f.seek(offset, from_what) 函數。from_what 值爲默認爲0,即文件開頭。from_what 的值, 若是是 0 表示開頭, 若是是 1 表示當前位置, 2 表示文件的結尾,例如:當你處理完一個文件後, 調用 f.close() 來關閉文件並釋放系統的資源,若是嘗試再調用該文件,則會拋出異常。
- seek(x,0) : 從起始位置即文件首行首字符開始移動 x 個字符
- seek(x,1) : 表示從當前位置日後移動x個字符
- seek(-x,2):表示從文件的結尾往前移動x個字符
- python的pickle模塊實現了基本的數據序列和反序列化。經過pickle模塊的序列化操做咱們可以將程序中運行的對象信息保存到文件中去,永久存儲。經過pickle模塊的反序列化操做,咱們可以從文件中建立上一次程序保存的對象。
- 基本接口:
- pickle.dump(obj, file, [,protocol])
- 有了 pickle 這個對象, 就能對 file 以讀取的形式打開:file 對象使用 open 函數來建立,下表列出了 file 對象經常使用的函數:file.close() / file.flush() / file.fileno() / file.isatty() / file.next() / file.read([size]) / file.readline([size]) / file.readlines([sizeint]) / file.seek(offset[, whence]) / file.tell() / file.truncate([size]) / file.write(str) / file.writelines(sequence)
- os 模塊提供了很是豐富的方法用來處理文件和目錄。經常使用的方法以下表所示:
- os.access(path, mode) 檢驗權限模式
- os.chdir(path) 改變當前工做目錄
- os.chflags(path, flags) 設置路徑的標記爲數字標記。
- os.chmod(path, mode) 更改權限
- os.chown(path, uid, gid) 更改文件全部者
- os.chroot(path) 改變當前進程的根目錄
- os.close(fd) 關閉文件描述符 fd
- os.closerange(fd_low, fd_high) 關閉全部文件描述符,從 fd_low (包含) 到 fd_high (不包含), 錯誤會忽略
- os.dup(fd) 複製文件描述符 fd
- os.dup2(fd, fd2) 將一個文件描述符 fd 複製到另外一個 fd2
- os.fchdir(fd) 經過文件描述符改變當前工做目錄
- os.fchmod(fd, mode) 改變一個文件的訪問權限,該文件由參數fd指定,參數mode是Unix下的文件訪問權限。
- os.fchown(fd, uid, gid) 修改一個文件的全部權,這個函數修改一個文件的用戶ID和用戶組ID,該文件由文件描述符fd指定。
- os.fdatasync(fd) 強制將文件寫入磁盤,該文件由文件描述符fd指定,可是不強制更新文件的狀態信息。
- os.fdopen(fd[, mode[, bufsize]]) 經過文件描述符 fd 建立一個文件對象,並返回這個文件對象
- os.fpathconf(fd, name) 返回一個打開的文件的系統配置信息。name爲檢索的系統配置的值,它也許是一個定義系統值的字符串,這些名字在不少標準中指定(POSIX.1, Unix 95, Unix 98, 和其它)。
- os.fstat(fd) 返回文件描述符fd的狀態,像stat()。
- os.fstatvfs(fd) 返回包含文件描述符fd的文件的文件系統的信息,像 statvfs()
- os.fsync(fd) 強制將文件描述符爲fd的文件寫入硬盤。
- os.ftruncate(fd, length) 裁剪文件描述符fd對應的文件, 因此它最大不能超過文件大小。
- os.getcwd() 返回當前工做目錄
- os.getcwdu() 返回一個當前工做目錄的Unicode對象
- os.isatty(fd) 若是文件描述符fd是打開的,同時與tty(-like)設備相連,則返回true, 不然False。
- os.lchflags(path, flags) 設置路徑的標記爲數字標記,相似 chflags(),可是沒有軟連接
- os.lchmod(path, mode) 修改鏈接文件權限
- os.lchown(path, uid, gid) 更改文件全部者,相似 chown,可是不追蹤連接。
- os.link(src, dst) 建立硬連接,名爲參數 dst,指向參數 src
- os.listdir(path) 返回path指定的文件夾包含的文件或文件夾的名字的列表。
- os.lseek(fd, pos, how) 設置文件描述符 fd當前位置爲pos, how方式修改: SEEK_SET 或者 0 設置從文件開始的計算的pos; SEEK_CUR或者 1 則從當前位置計算; os.SEEK_END或者2則從文件尾部開始. 在unix,Windows中有效
- os.lstat(path) 像stat(),可是沒有軟連接
- os.major(device) 從原始的設備號中提取設備major號碼 (使用stat中的st_dev或者st_rdev field)。
- os.makedev(major, minor) 以major和minor設備號組成一個原始設備號
- os.makedirs(path[, mode]) 遞歸文件夾建立函數。像mkdir(), 但建立的全部intermediate-level文件夾須要包含子文件夾。
- os.minor(device) 從原始的設備號中提取設備minor號碼 (使用stat中的st_dev或者st_rdev field )。
- os.mkdir(path[, mode]) 以數字mode的mode建立一個名爲path的文件夾.默認的 mode 是 0777 (八進制)。
- os.mkfifo(path[, mode]) 建立命名管道,mode 爲數字,默認爲 0666 (八進制)
- os.mknod(filename[, mode=0600, device]) 建立一個名爲filename文件系統節點(文件,設備特別文件或者命名pipe)。
- os.open(file, flags[, mode]) 打開一個文件,而且設置須要的打開選項,mode參數是可選的
- os.openpty() 打開一個新的僞終端對。返回 pty 和 tty的文件描述符。
- os.pathconf(path, name) 返回相關文件的系統配置信息。
- os.pipe() 建立一個管道. 返回一對文件描述符(r, w) 分別爲讀和寫
- os.popen(command[, mode[, bufsize]]) 從一個 command 打開一個管道
- os.read(fd, n) 從文件描述符 fd 中讀取最多 n 個字節,返回包含讀取字節的字符串,文件描述符 fd對應文件已達到結尾, 返回一個空字符串。
- os.readlink(path) 返回軟連接所指向的文件
- os.remove(path) 刪除路徑爲path的文件。若是path 是一個文件夾,將拋出OSError; 查看下面的rmdir()刪除一個 directory。
- os.removedirs(path) 遞歸刪除目錄。
- os.rename(src, dst) 重命名文件或目錄,從 src 到 dst
- os.renames(old, new) 遞歸地對目錄進行改名,也能夠對文件進行改名。
- os.rmdir(path) 刪除path指定的空目錄,若是目錄非空,則拋出一個OSError異常。
- os.stat(path) 獲取path指定的路徑的信息,功能等同於C API中的stat()系統調用。
- os.stat_float_times([newvalue]) 決定stat_result是否以float對象顯示時間戳
- os.statvfs(path) 獲取指定路徑的文件系通通計信息
- os.symlink(src, dst) 建立一個軟連接
- os.tcgetpgrp(fd) 返回與終端fd(一個由os.open()返回的打開的文件描述符)關聯的進程組
- os.tcsetpgrp(fd, pg) 設置與終端fd(一個由os.open()返回的打開的文件描述符)關聯的進程組爲pg。
- os.ttyname(fd) 返回一個字符串,它表示與文件描述符fd 關聯的終端設備。若是fd 沒有與終端設備關聯,則引起一個異常。
- os.unlink(path) 刪除文件路徑
- os.utime(path, times) 返回指定的path文件的訪問和修改的時間。
- os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]) 輸出在文件夾中的文件名經過在樹中游走,向上或者向下。
- os.write(fd, str) 寫入字符串到文件描述符 fd中. 返回實際寫入的字符串長度
- Python有兩種錯誤很容易辨認:語法錯誤和異常。Python 的語法錯誤或者稱之爲解析錯。即使Python程序的語法是正確的,在運行它的時候,也有可能發生錯誤。運行期檢測到的錯誤被稱爲異常。大多數的異常都不會被程序處理,都以錯誤信息的形式展示在這裏。
- 一個 try 語句可能包含多個except子句,分別來處理不一樣的特定的異常。最多隻有一個分支會被執行。處理程序將只針對對應的try子句中的異常進行處理,而不是其餘的 try 的處理程序中的異常。一個except子句能夠同時處理多個異常,這些異常將被放在一個括號裏成爲一個元組。最後一個except子句能夠忽略異常的名稱,它將被看成通配符使用。你可使用這種方法打印一個錯誤信息,而後再次把異常拋出。
- try except 語句還有一個可選的else子句,若是使用這個子句,那麼必須放在全部的except子句以後。這個子句將在try子句沒有發生任何異常的時候執行。使用 else 子句比把全部的語句都放在 try 子句裏面要好,這樣能夠避免一些意想不到的、而except又沒有捕獲的異常。異常處理並不只僅處理那些直接發生在try子句中的異常,並且還能處理子句中調用的函數(甚至間接調用的函數)裏拋出的異常。
- Python 使用 raise 語句拋出一個指定的異常。raise 惟一的一個參數指定了要被拋出的異常。它必須是一個異常的實例或者是異常的類(也就是 Exception 的子類)。若是你只想知道這是否拋出了一個異常,並不想去處理它,那麼一個簡單的 raise 語句就能夠再次把它拋出。
- 你能夠經過建立一個新的exception類來擁有本身的異常。異常應該繼承自 Exception 類,或者直接繼承,或者間接繼承。當建立一個模塊有可能拋出多種不一樣的異常時,一種一般的作法是爲這個包創建一個基礎異常類,而後基於這個基礎類爲不一樣的錯誤狀況建立不一樣的子類。大多數的異常的名字都以"Error"結尾,就跟標準的異常命名同樣。
- try 語句還有另一個可選的子句,它定義了不管在任何狀況下都會執行的清理行爲。無論 try 子句裏面有沒有發生異常,finally 子句都會執行。若是一個異常在 try 子句裏(或者在 except 和 else 子句裏)被拋出,而又沒有任何的 except 把它截住,那麼這個異常會在 finally 子句執行後再次被拋出。
- 一些對象定義了標準的清理行爲,不管系統是否成功的使用了它,一旦不須要它了,那麼這個標準的清理行爲就會執行。關鍵詞 with 語句就能夠保證諸如文件之類的對象在使用完以後必定會正確的執行他的清理方法。