python 2.7 中文教程及自動化測試介紹
簡介
Python是一門簡單易學,功能強大的編程語言。它具有高效的高層次數據結構,簡單但有效的方式支持面向對象編程,語法優雅,動態類型,解釋執行。使之成為多數平臺上很多領域的腳本和快速應用開發的理想語言。
Python解釋器及其豐富的標準庫的源碼或者二進制版本可以從http://www.python.org/免費獲取和轉發。該還包含很多免費的第三方Python模塊、程序、工具的發布鏈接及附加文檔。
Python的解釋器很容易用C或C++(或其他c可以調用的語言)擴展新功能和數據類型。 Python也適用于作為定制應用的擴展語言。
本教程向讀者通俗地介紹Python語言和系統的基本概念和特點。配合Python解釋器邊學邊練最佳,所有例子已經自包含在教程中,也可離線閱讀。
標準對象和模塊參見The Python Standard Library。The Python Language Reference提供了Python更正式的說明。要用C或C++編寫擴展參見Extending and Embedding the Python Interpreter和Python/C API Reference Manual。
本教程不會面面俱到。它介紹了許多Python的最引人注目的特性,會讓你了解python風格。看完之后可閱讀和編寫Python模塊。
所有例子基于linux演示,不考慮Windows。
開胃菜
如果你做很多電腦上工作,最終你發現,有些任務你想實現自動化。例如你在大量的文本文件上執行搜索和替換,或通過復雜的方式重命名和重整一批照片文件。也許你想編寫小型的自定義數據庫,或者專門的圖形用戶界面應用程序,或簡單的游戲。
如果你是個專業的軟件開發,你可能處理幾個C/C++/Java庫,編寫/編譯/測試/重編譯周期太慢。也許你正在為庫編寫測試套件,發現書寫測試代碼是個體力活。或者應用程序需要一門擴展語言,但是不想設計和實施新的語言。
Python就是你需要的語言。
你 可以為這些任務寫Unix shell腳本或Windows批處理文件,但shell腳本更適合移動文件和更改文本數據,不擅長圖形用戶界面的應用程序或游戲。你可以寫一個 C/C++/Java程序,但需要消耗大量開發時間。 Python易于使用,可用于Windows,Mac OS X和Unix操作系統,并幫助你更快速地完成工作。
Python雖然使用簡單,但是真正的編程語言。跟shell腳本或批處理文件比,它提 供更多的結構并支持大型程序。Python比C提供了更多的錯誤檢查。它是更高級別的語言,內置了的高級數據類型,如靈活的數組和字典。基于這些通用數據 類型, Python相對Awk甚至是Perl可以處理很多領域的難題,很多東東在python中會比其他語言處理起來更容易。
Python允許你分割程序為模塊,以便在其他Python程序重復使用。它包含了豐富的標準模塊,你可以調用或學習。一些模塊提供如文件I/O,系統調用,socket,甚至像Tk圖形用戶界面接口。
Python是解釋語言,程序開發時不需要編譯和鏈接而節省可觀的時間。解釋器可交互使用,方便試驗的語言特性,寫信手而用的程序,還可在自下而上的程序開發時測試功能,同時是方便的桌面計算器。
Python編寫的應用程序緊湊,可讀性好。 Python程序通常同樣的C ,C++或Java程序要短得多,原因如下:
-
高級數據類型允許你在單條語句中表示復雜的操作;
-
語句的組織依賴于縮進而不是開始和結束的括號;
-
變量或參數聲明不是必須的。
Python是可擴展的:懂C的話很容易添加新的內置函數或模塊到解釋器,可以最快速度執行關鍵操作或鏈接Python程序到二進制庫(如供應商特定的圖形庫)。等你熟悉之后,可以鏈接Python解釋器到C應用程序,并用它作為擴展或命令語言。
Python的名字來源于英國廣播公司(BBC)節目"Monty Python’s Flying Circus",與爬行動物無關。
現在大家已經對Python產生了興趣,想了解更多。學習一門語言的最好方式就是使用它,讓我們首先學習Python解釋器。
教程的其他部分通過實例介紹了Python語言和系統的各種特性。先是簡單表達式,語句和數據類型,然后函數和模塊,最后是高級概念比如異常和用戶定義的類。
解釋器
解釋器的操作有些像Unix Shell:當標準輸入連接到tty設備時,它讀取并以交互方式執行命令;當文件名參數或以文件作為標準輸入設備時,它讀取并執行文件中腳本。
調用python解釋器
Python的解釋器在linux上通常安裝在/usr/bin/python,/usr/local/bin/python,/usr/local/bin/python等地方。Windows一般位于C:\Python27,且一般需要設置PATH環境變量。
#python Python 2.7.5 (default, Jun 17 2014, 18:11:42) [GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux2 Type "help", "copyright", "credits" or "license" for more information.
退出解釋器:Linux上Control-D,Windows上Control-Z,統一的方式:quit()。
解釋器的行編輯功能并不復雜。在Unix上,解釋器可能已啟用了GNU readline庫,它增加了更多的交互編輯和歷史記錄功能。輸入Control-P,如果發出嗶嗶聲表示支持readline;見附錄交互式輸入編輯和歷史替換https://docs.python.org/2/tutorial/interactive.html#tut-interacting。
解釋器的操作有些像Unix Shell:當標準輸入連接到tty設備時,它讀取并以交互方式執行命令;當文件名參數或以文件作為標準輸入設備時,它讀取并執行文件中腳本。 啟動解釋器的第二個方法是python -c command [arg] ...,執行command中的語句,等同于Shell的-c選項。因為Python語句通常會包括空格或其他shell的特殊字符是特殊的外殼,建議使 把command放在單引號中。注意因為縮進原因,開始的引號后面不能有空格。
$ python -c "print 'Hello'" Hello $ python -c 'print "Hello"' Hello
一些Python模塊也作為腳本使用:python -m module [arg] ...。
使用腳本文件時,-i參數可以進入交互模式。
比如有test.py文件如下:
print("Hello") print("World!")
執行:
$ python -i test.py Hello World! >>>
參數傳遞
腳本名和附加參數轉換成字符串列表傳遞給sys模塊中的argv變量。導入sys模塊訪問這個列表。列表的長度至少為1,在無腳本無參數時,sys.argv[0]是空字符串。當腳本名為"-"(即標準輸入),sys.argv[0]為"-"。使用-c參數時,sys.argv中[0]設置為'-c'。使用-m參數sys.argv中[0]設置為模塊的全名。-c或-m之后的選項留在sys.argv中待命令或模塊來處理。
可以用sys.argv來處理參數:
#!/usr/bin/env python # encoding: utf-8 import sys print "script name is", sys.argv[0] if len(sys.argv) > 1: print "there are", len(sys.argv)-1, "arguments:" for arg in sys.argv[1:]: print arg else: print "there are no arguments!"
$ ./test.py 1 2 3 script name is ./test.py there are 3 arguments: 1 2 3
注意:通常python標準模塊argparse處理參數會更合適。
交互模式
當tty讀取命令時解釋器為交互模式。主命令提示符為(>>>),從命令提示符(...)用于續行。
$ python Python 2.7.6 (default, Jun 22 2015, 17:58:13) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> the_world_is_flat = 1 >>> if the_world_is_flat: ... print "Be careful not to fall off!
錯誤處理
當錯誤發生時,解釋器打印錯誤信息和棧跟蹤。在交互模式下,它返回主提示符;在文件輸入時,打印棧跟蹤器后以非零退出狀態退出。有些錯誤致命的,無條件以非零退出的退出,比如內部不一致和內存耗盡。所有的錯誤信息都寫入標準錯誤流;正常輸出寫入標準輸出。
輸入中斷符(通常是Control-C或DEL)可以取消輸入,命令執行時輸入中斷引發一個KeyboardInterrupt異常。
執行python腳本
Linux系統中,Python腳本可直接執行,就像shell腳本,在文件首行添加如下:
#! /usr/bin/env python
并添加可執行權限:
chmod +x myscript.py
Windows系統中Python的安裝程序會自動關聯*.py到python.exe,雙擊即可運行。*.pyw則不會出現windows控制臺。
源碼編碼
使用的編碼ASCII(默認)以外的字符Python的源文件,可以在行#!之后定義源文件編碼:
# -*- coding: encoding -*-
根據這個聲明,源文件中的所有字符將用該編碼的編碼,并可能在用選定的編碼書寫Unicode字符串。編碼列表可以在Python庫參考手冊的codecshttps://docs.python.org/2/library/codecs.html#module-codecs部分找到。實例:
# -*- coding: iso-8859-15 # -*-currency = u"€" print ord(currency)
一般推薦使用utf-8的格式,在網絡上比較通用,可以這樣設置:
# coding=utf-8
特殊的中文處理可以使用gbk。通常為了正確顯示所有的字符,編輯器必須支持utf-8等格式,并有相應的字體。
交互式啟動文件(非常用)
交互式使用Python的時候,常常需要在解釋器啟動時執行一些標準命令。可設置環境變量PYTHONSTARTUP表示啟動命令文件,類似Unix shell的.profile文件。
文件只對交互會話有效,當 Python 從腳本中讀取命令或以終端/dev/tty做為外部命令源(行為和交互式會話類似)。它與解釋器執行的命令在同一命名空間,這樣它定義或導入的對象可以在 解釋器中使用。也可以在這個文件中改變提示符sys.ps1和sys.ps2。
加載其他文件的方式:
if os.path.isfile('.pythonrc.py'): execfile('.pythonrc.py')
在腳本中使用啟動文件如下:
import os filename = os.environ.get('PYTHONSTARTUP') if filename and os.path.isfile(filename): execfile(filename)
自定義模塊(非常用)
Python有兩個hook: sitecustomize 和 usercustomize。使用它們首先需要知道site-packages目錄,方法如下:
>>> import site >>> site.getusersitepackages() '/root/.local/lib/python2.7/site-packages'
現在你可以在site-packages的目錄下創建文件usercustomize.py,放入你想添加的任何內容。 該文件會影響 python 的每次調用,除非啟動的時候加入-s選項禁止自動導入。
類似的有sitecustomize,但是一般由管理員在全局site-packages創建,在usercustomize之前導入,更多資料參見site模塊https://docs.python.org/2/library/site.html#module-site。
非正式教程
下面的例子中,輸入和輸出分別由>>>和...開始。
Python中的注釋以#字符起始,到行尾。實例如下:
Python 2.7.6 (default, Jun 22 2015, 17:58:13) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> the_world_is_flat = 1 >>> if the_world_is_flat: ... print "Be careful not to fall off!" ... Be careful not to fall off!
將Python當做計算器
數值
解釋器像簡單的計算器:可以輸入表達式,它會返回值。表達式語法很簡單:運算符 + , - , * 和 / 與其它語言一樣(例如Pascal或C);括號用于分組。例如:
>>> 2 + 2 4 >>> 50 - 5*6 20 >>> (50 - 5.0*6) / 4 5.0 >>> 8 / 5.0 1.6
"/"的返回類型取決于操作數。如果兩個操作數都是int類型,執行地板除(參見https://docs.python.org/2/glossary.html#term-floor-division)和返回int。如果操作數有浮點數,執行經典除法和并返回浮點數,浮點數的地板除可以使用//。取余使用%:
>>> 17 / 3 # int / int -> int 5 >>> 17 / 3.0 # int / float -> float 5.666666666666667 >>> 17 // 3.0 # explicit floor division discards the fractional part 5.0 >>> 17 % 3 # the % operator returns the remainder of the division 2 >>> 5 * 3 + 2 # result * divisor + remainder 17
"**"表示乘方:
>>> 5 ** 2 # 5 squared 25 >>> 2 ** 7 # 2 to the power of 7 128
等號( '=' )用于給變量賦值:
>>> width = 20 >>> height = 5*9 >>> width * height 900
同一值可以同時賦給幾個變量:
>>> x = y = z = 0 # Zero x, y and z >>> x 0 >>> y 0 >>> z 0
變量在使用前必須"定義"(賦值),否則會出錯:
>>> n Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'n' is not defined
支持浮點數,混合計算時會自動整型轉為浮點數:
>>> 3 * 3.75 / 1.5 7.5 >>> 7.0 / 2 3.5
交互模式中,最近表達式的值賦給變量 _ 。更方便連續計算把Python當作桌面計算器,例如:
>>> tax = 12.5 / 100 >>> price = 100.50 >>> price * tax 12.5625 >>> price + _ 113.0625 >>> round(_, 2) 113.06
此變量對于用戶是只讀的。
除了int和float,還有fractions(https://docs.python.org/2/library/fractions.html#fractions.Fraction)和decimal(https://docs.python.org/2/library/decimal.html#decimal.Decimal)。
下面的復數部分很少使用,通常可以不閱讀。
支持復數,虛數帶有后綴j或J,有非零實部的復數寫為(real+imagj),或者用complex(real, imag)函數創建。
>>> 1j * 1J (-1+0j) >>> 1j * complex(0,1) (-1+0j) >>> 3+1j*3 (3+3j) >>> (3+1j)*3 (9+3j) >>> (1+2j)/(1+1j) (1.5+0.5j)
復數的實部和虛部總是記為兩個浮點數。要從復數z中提取實部和虛部,使用z.real和 z.imag。
>>> a=1.5+0.5j >>> a.real 1.5 >>> a.imag 0.5
浮點數和整數轉換函數(float(), int()和long())不適用于復數。沒有方法把復數轉成實數。函數abs(z)用于取模(為浮點數)或z.real取實部:
>>> a=3.0+4.0j >>> float(a) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't convert complex to float >>> a.real 3.0 >>> a.imag 4.0 >>> abs(a) # sqrt(a.real**2 + a.imag**2) 5.0
字符串
字符串可以包含在單引號或雙引號中。
>>> 'spam eggs ''spam eggs' >>> 'doesn\'t' "doesn't" >>> "doesn't" "doesn't" >>> '"Yes," he said.' '"Yes," he said.' >>> "\"Yes,\" he said." '"Yes," he said.' >>> '"Isn\'t," she said.' '"Isn\'t," she said.'
解釋器按照字符串被輸入的方式顯示字符串,通常包含在單引號中,如果內容包含包含單引號,則包含在雙引號中。
print會以更可視的格式顯示:
>>> '"Isn\'t," she said.' '"Isn\'t," she said.' >>> print '"Isn\'t," she said.' "Isn't," she said. >>> s = 'First line.\nSecond line.' # \n means newline >>> s 'First line.\nSecond line.' >>> print s # with print, \n produces a new line First line. Second line.
字符串前面添加'r'表示原始字符串,里面的反斜杠不會轉義:
>>> print 'C:\some\name' # here \n means newline! C:\some ame >>> print r'C:\some\name' # note the r before the quote C:\some\name
跨行的字符串多使用三引號,即三個單引號或者三個雙引號:
>>> print """\ ... Usage: thingy [OPTIONS] ... -h Display this usage message ... -H hostname Hostname to connect to ... """ Usage: thingy [OPTIONS] -h Display this usage message -H hostname Hostname to connect to >>> print """ ... Usage: thingy [OPTIONS] ... -h Display this usage message ... -H hostname Hostname to connect to ... """ Usage: thingy [OPTIONS] -h Display this usage message -H hostname Hostname to connect to
注意第一個三引號后面有反斜杠,就不會輸出第一個換行符。末尾的反斜杠表示續行。
字符串可用+操作符連接,用*重復:
>>> 3 * 'un' + 'ium' 'unununium'
相鄰字符串文本會自動連接,它只用于字符串文本,不能用于字符串表達式和變量(需要使用加號)等:
>>> 'Py' 'thon' 'Python' >>> prefix 'thon File "<stdin>", line 1 prefix 'thon ^ SyntaxError: EOL while scanning string literal >>> ('un' * 3) 'ium' File "<stdin>", line 1 ('un' * 3) 'ium' ^ SyntaxError: invalid syntax >>> prefix + 'thon' 'Python' # 在拆分長字符串時很有用。 >>> text = ('Put several strings within parentheses ' ... 'to have them joined together.') >>> text 'Put several strings within parentheses to have them joined together.'
命令行自動化與pexpect
預計9.18整理完畢
聯系作者:徐榮中 python開發自動化測試群113938272 微博 http://weibo.com/cizhenshi。
原英文地址:https://docs.python.org/2/tutorial/