Python與Perl,C和Java語言等有許多相似之處。不過,也有語言之間有一些明確的區別。本章的目的是讓你迅速學習Python的語法。
第一個Python程序:
交互模式編程:
調用解釋器不經過腳本文件作為參數,顯示以下提示:
1
2
3
4
5
|
$ python Python 2.6 . 4 ( #1, Nov 11 2014, 13:34:43) [GCC 4.1 . 2 20120704 (Red Hat 5.6 . 2 - 48 )] on linux2 Type "help" , "copyright" , "credits" or "license" for more information. >>> |
鍵入下列文字在Python提示符,然后按Enter鍵:
1
|
>>> print "Hello, Python!" ; |
如果您運行的是新的Python版本,那么需要使用打印語句括號像print ("Hello, Python!");。但是在Python版本2.6.4,這將產生以下結果:
Hello, Python!
腳本模式編程:
調用解釋器及腳本作為參數,并開始執行的腳本,并一直持續到腳本完成。當腳本完成時,解釋器不再是活動的。
讓我們在腳本中編寫一個簡單的Python程序。所有的Python文件將具有.py擴展。所以,把下面的代碼寫在一個test.py文件。
print "Hello, Python!";
在這里,我假設你已經在PATH變量中設置Python解釋器。現在,嘗試如下運行這個程序:
$ python test.py
這將產生以下結果:
Hello, Python!
讓我們嘗試另一種方式來執行Python腳本。下面是修改后的test.py文件:
#!/usr/bin/python
print "Hello, Python!";
在這里,假設Python解釋器在/usr/bin目錄中可用。現在,嘗試如下運行這個程序:
$ chmod +x test.py # This is to make file executable
$./test.py
這將產生以下結果:
Hello, Python!
Python標識符:
Python標識符是用來標識一個變量,函數,類,模塊或其他對象的名稱。一個標識符開始以字母A到Z或a?z或后跟零個或多個字母下劃線(_),下劃線和數字(0?9)。
Python中標識符內不允許標點符號,如@,$和%。 Python是一種區分大小寫的編程語言。因此,Manpower 和manpower在Python中是兩個不同的標識符。
這里有Python標識符命名約定:
• 類名以大寫字母以及所有其它標識符以小寫字母。
• 開頭單個前導下劃線的標識符表示由該標識符約定意思是私有的。
• 開頭兩個前導下劃線的標識符表示一個強烈的私有的標識符。
• 如果標識符末尾還具有兩個下劃線結束時,該標識符是一個語言定義的特殊名稱。
保留字:
下面列出了在Python中的保留字。這些保留字不可以被用作常量或變量,或任何其它標識符。所有Python關鍵字只包含小寫字母。
and | exec | not |
assert | finally | or |
break | for | pass |
class | from | |
continue | global | raise |
def | if | return |
del | import | try |
elif | in | while |
else | is | with |
except | lambda | yield |
行和縮進:
一個程序員學習Python時,遇到的第一個需要注意的地方是,不使用括號來表示代碼的類和函數定義塊或流程控制。代碼塊是由行縮進,這是嚴格執行表示方式。
在縮進位的數目是可變的,但是在塊中的所有語句必須縮進相同的量。在這個例子中,兩個功能塊都很好使用:
1
2
3
4
|
if True : print "True" else : print "False" |
然而,在本實施例中的第二塊將產生一個錯誤:
1
2
3
4
5
6
|
if True : print "Answer" print "True" else : print "Answer" print "False" |
因此,在Python中所有的連續線縮進的空格數同樣的會結成塊。以下是各種語句塊中的例子:
注意:不要試圖理解所使用的邏輯或不同的功能。只要確定你明白,即使他們各種模塊無需括號。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
#!/usr/bin/python import sys try : # open file stream file = open (file_name, "w" ) except IOError: print "There was an error writing to" , file_name sys.exit() print "Enter '" , file_finish, print "' When finished" while file_text ! = file_finish: file_text = raw_input ( "Enter text: " ) if file_text = = file_finish: # close the file file .close break file .write(file_text) file .write(" ") file .close() file_name = raw_input ( "Enter filename: " ) if len (file_name) = = 0 : print "Next time please enter something" sys.exit() try : file = open (file_name, "r" ) except IOError: print "There was an error reading file" sys.exit() file_text = file .read() file .close() print file_text |
多行語句:
Python語句通常用一個新行結束。 但是,Python允許使用續行字符()來表示,該行應該繼續下去(跨行)。例如:
1
2
3
|
total = item_one + item_two + item_three |
包含在[],{}或()括號內的陳述并不需要使用續行符。例如:
1
2
|
days = [ 'Monday' , 'Tuesday' , 'Wednesday' , 'Thursday' , 'Friday' ] |
Python引號:
Python接受單引號('),雙引號(“)和三(''或”“”)引用,以表示字符串常量,只要是同一類型的引號開始和結束的字符串。
三重引號可以用于跨越多個行的字符串。例如,所有下列是合法的:
1
2
3
4
|
word = 'word' sentence = "This is a sentence." paragraph = """This is a paragraph. It is made up of multiple lines and sentences.""" |
Python注釋:
一個井號(#),這不是一個字符串文字開頭的注釋。“#”號之后字符和到物理行是注釋的一部分,Python解釋器會忽略它們。
1
2
3
4
|
#!/usr/bin/python # First comment print "Hello, Python!" ; # second comment |
這將產生以下結果:
Hello, Python!
注釋可能會在聲明中表達或同一行之后:
1
|
name = "Madisetti" # This is again comment |
你可以使用多行注釋如下:
1
2
3
4
|
# This is a comment. # This is a comment, too. # This is a comment, too. # I said that already. |
使用空行:
一行只含有空格,可能帶有注釋,如果是空行那么Python完全忽略它。
在交互式解釋器會話中,必須輸入一個空的物理行終止多行語句。
等待用戶:
程序的下面一行顯示的提示,按回車鍵退出,等待用戶按下回車鍵:
1
2
|
#!/usr/bin/python raw_input ( "Press the enter key to exit." ) |
在這里,“ 已”被用來顯示實際行之前創建兩個換行。一旦用戶按下鍵時,程序結束。這是一個很好的技巧,保持一個控制臺窗口打開,直到用戶完成應用程序運行。
在一行中多個語句:
分號( ; ) 允許在單行寫入多條語句,不管語句是否啟動一個新的代碼塊。下面是使用分號示例:
1
|
import sys; x = 'foo' ; sys.stdout.write(x + '') |
多個語句組作為套件:
一組單獨的語句,在Python單一的代碼塊被稱為序列。復雜的語句,如if, while, def, and class,那些需要一個標題行和套件。
標題行開始的聲明(與關鍵字),并終止與冒號(:)),接著是一個或多個線構成該套件。例如:
1
2
3
4
5
6
|
if expression : suite elif expression : suite else : suite |
命令行參數:
我們可能已經看到了,比如,很多程序可以運行,它們提供有關如何運行的一些基本信息。 Python中可以使用 -h 做到這一點:
1
2
3
4
5
6
7
8
9
|
$ python - h usage: python [option] ... [ - c cmd | - m mod | file | - ] [arg] ... Options and arguments ( and corresponding environment variables): - c cmd : program passed in as string (terminates option list ) - d : debug output from parser (also PYTHONDEBUG = x) - E : ignore environment variables (such as PYTHONPATH) - h : print this help message and exit [ etc. ] |
您也可以設定您的腳本,它應該以這樣的方式接受各種選項。 命令行參數是一個高級主題并在以后學習,當您通過其它的Python概念后。
以下是補充:
Python中查看變量對應的地址用函數id(var)。
注意在Python中與在C語言中有一些不同的地方。比如:a = 10,在Python中是這樣的,數值10在內存中開辟一塊空間來存放數據10,然后用a去引用這個10,所以這里a相當于一個標簽,如果a被重新賦值了,相當于a又指向了另一個地址,比如a = 1000,那么a指向了數據1000的地址,在這點與C語言有很大的不同。
所以相同的數據用不同的變量去引用,它們的地址一樣,比如:
a = 123 b = 123
然后我們輸出id(a)和id(b)會發現這兩個值完全一樣
Python中的復數
在Python中復數類型的虛部用j表示的,比如a = 3 + 4j
可以直接進行計算。
Python中序列的基本操作
(1)len() 求序列的長度
(2)+ 序列拼接
(3)* 重復序列元素
(4)in 判斷元素是否在序列中
(5)max()與min() 返回序列的最大值和最小值
(6)compare(str1,str2) str1小于str2返回-1,等于返回0,大于返回1
元組
a,b,c = (1,2,3)
t = (“name”,30,”school”)
列表
list = [“name”,30,”school”]
可以看出,元組是用(),而列表用[],另外在元組中不能改變單個元素的值,而列表可以。
Python里面增加了**運算符和//運算符
**用于冪的計算,比如計算2的3次方,就直接a=2**3
1
2
3
4
|
>>> a = 2 * * 3 >>> print a 8 >>> |
//用于向下取模,主要用于浮點數,比如3//1.7 = 1.0
1
2
3
4
|
>>> a = 3 / / 1.7 >>> print a 1.0 >>> |
數字類型的內建函數
轉換函數:將其他類型的數字轉換為相應類型
int()、long()、float()、complex()
bool()
1
2
3
4
5
|
>>> a = 6 >>> b = complex (a) >>> print b ( 6 + 0j ) >>> |
功能函數:
abs(num) 絕對值
coerce(num1,num2) 將num1和num2轉換為同一類型,然后以一個元組的形式返回
1
2
3
4
5
|
>>> a = 3.14159 >>> b = 100 >>> print coerce (a,b) ( 3.14159 , 100.0 ) >>> |
divmod(num1,num2) 獲得商和余數的元組
1
2
3
4
5
|
>>> a = 9 >>> b = 6 >>> print divmod (a,b) ( 1 , 3 ) >>> |
pow(num1,num2,mod=1) 快速冪取模運算
1
2
3
4
|
>>> a = 2 >>> b = 3 >>> print pow (a,b, 5 ) 3 |
round(flt,ndig=1) 對浮點型進行四舍五入運算
1
2
3
|
>>> print round ( 3.1415926 , 4 ) 3.1416 >>> |
列表類型內建函數
list.append(obj) 向列表中添加一個對象obj
list.count(obj) 返回一個對象obj在列表中出現的次數
list.extend(obj) 把序列obj中的內容添加到列表中
list.index(obj,i=0,j=len(list)) 返回list[k]
list.insert(index,obj) 在index位置插入對象obj
list.pop(index=-1) 刪除并返回指定位置的對象,默認是最后一個對象
list.remove(obj) 從列表中刪除對象obj
list.reversed()
list.sort()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
>>> arr = [ 1 , 1 , 5 , 6 , 9 , 7 , 3 , 2 , 11 , 56 , 45 , 78 , 100 , 55 , 0 , 5 , 9 , 10 ] >>> arr.append( 89 ) >>> print arr [ 1 , 1 , 5 , 6 , 9 , 7 , 3 , 2 , 11 , 56 , 45 , 78 , 100 , 55 , 0 , 5 , 9 , 10 , 89 ] >>> print arr.count( 5 ) 2 >>> arr1 = [ 123 , 456 , 789 ] >>> arr.extend(arr1) >>> print arr [ 1 , 1 , 5 , 6 , 9 , 7 , 3 , 2 , 11 , 56 , 45 , 78 , 100 , 55 , 0 , 5 , 9 , 10 , 89 , 123 , 456 , 789 ] >>> arr.insert( 1 , 999 ) >>> print arr [ 1 , 999 , 1 , 5 , 6 , 9 , 7 , 3 , 2 , 11 , 56 , 45 , 78 , 100 , 55 , 0 , 5 , 9 , 10 , 89 , 123 , 456 , 789 ] >>> arr.pop( 0 ) 1 >>> print arr [ 999 , 1 , 5 , 6 , 9 , 7 , 3 , 2 , 11 , 56 , 45 , 78 , 100 , 55 , 0 , 5 , 9 , 10 , 89 , 123 , 456 , 789 ] >>> arr.remove( 999 ) >>> print arr [ 1 , 5 , 6 , 9 , 7 , 3 , 2 , 11 , 56 , 45 , 78 , 100 , 55 , 0 , 5 , 9 , 10 , 89 , 123 , 456 , 789 ] >>> arr.sort() >>> print arr [ 0 , 1 , 2 , 3 , 5 , 5 , 6 , 7 , 9 , 9 , 10 , 11 , 45 , 55 , 56 , 78 , 89 , 100 , 123 , 456 , 789 ] >>> |
列表有容器和可變特性
堆棧—后進先出
list.append() 向隊列尾部添加
list.pop() 從隊列尾部刪除
隊列—先進先出
list.append() 向隊列尾部添加
list.pop(0) 從隊列頭部刪除
字典類型:
訪問字典中的值
通過鍵訪問相應的值 dict2['name']
訪問字典的鍵 dict2.keys(),返回一個列表
訪問字典的值 dict2.values(), 返回一個列表
遍歷一個字典
執行中字典的鍵不能被改變
刪除字典元素和字典 del dict2[name] del dict2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
>>> dict = { 'name' : 'goujinping' , 'age' : '21' , 'sex' : 'man' , 'school' : 'NEFU' } >>> print dict { 'age' : '21' , 'school' : 'NEFU' , 'name' : 'goujinping' , 'sex' : 'man' } >>> dict [ 'age' ] '21' >>> print dict [ 'name' ] goujinping >>> print dict [ 'age' ] 21 >>> for key in dict .keys(): print key age school name sex >>> for value in dict .values(): print value 21 NEFU goujinping man >>> del dict [ 'sex' ] >>> print dict { 'age' : '21' , 'school' : 'NEFU' , 'name' : 'goujinping' } >>> del dict [ 'school' ] >>> print dict { 'age' : '21' , 'name' : 'goujinping' } >>> del dict >>> print dict < type 'dict' > >>> |