python 2.7 中文教程及自動化測試介紹

jopen 9年前發布 | 41K 次閱讀 Python Python開發

簡介

Python是一門簡單易學,功能強大的編程語言。它具有高效的高層次數據結構,簡單但有效的方式支持面向對象編程,語法優雅,動態類型,解釋執行。使之成為多數平臺上很多領域的腳本和快速應用開發的理想語言。

Python解釋器及其豐富的標準庫的源碼或者二進制版本可以從http://www.python.org/免費獲取和轉發。該還包含很多免費的第三方Python模塊、程序、工具的發布鏈接及附加文檔。

Python的解釋器很容易用C或C++(或其他c可以調用的語言)擴展新功能和數據類型。 Python也適用于作為定制應用的擴展語言。

本教程向讀者通俗地介紹Python語言和系統的基本概念和特點。配合Python解釋器邊學邊練最佳,所有例子已經自包含在教程中,也可離線閱讀。

標準對象和模塊參見The Python Standard LibraryThe Python Language Reference提供了Python更正式的說明。要用C或C++編寫擴展參見Extending and Embedding the Python InterpreterPython/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/


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!