對於多數從其餘編程語言轉入Python的來講,或多或少會有些不習慣。若是沿用其餘編程語言的語法來寫Python代碼,那麼碰壁是不可避免的了。html
本文是基於我看了兩個小時的官方文檔(Python 2.7 : https://docs.python.org/2/tutorial/index.html , 至於我學習Python2.x的緣由:工做須要),python
從中提取的重要的細節,以免再次踩坑。shell
先上一個Python文件(Foo.py):編程
#!python # -*- coding: utf-8 -*- ''' python 的註釋: 多行註釋: 用成對的3個單引號或者3個雙引號組成 (例如當前位置) 單行註釋:使用# ''' # 定義一個foo函數,用於把指定msg打印 count次 """ params: count: int, 打印的次數 msg: string,消息內容 useFor:屢次打印時,是否採用for loop。 raise: ValueError : 當count<0時拋出 """ def foo(count=1, msg='Hello'+' '+ "Foo", useFor=1): if count < 0 : raise ValueError('count < 0') if useFor : # 0,1 能夠用做bool斷定 print("print use for, count = " + bytes(count) +" :") for i in range(count): # range(N),會生成一個從0到N的list,剛好能夠用做索引 print(msg+' '+bytes(i)) else: print("print use while, count = " + bytes(count)+" :") i = 0 while i < count: print(msg+" "+bytes(i)) i+=1 # python中不支持 i++的寫法,支持 i+= 的寫法 if __name__ == '__main__' : print('main in Foo.py') foo(2,useFor=1) foo(useFor=0, count=3); foo(-1)
做爲一個腳本語言,文件頭指定一些執行環境等,是很常見的事情。在shell中就很常見的。app
那麼對於Python腳本,也有一樣的內容:編程語言
腳本語言,很常見的配置:函數
#!/bin/sh shell腳本 #!/usr/bin/perl perl腳本 #!/usr/bin/python python腳本 #!/usr/bin/python3 python3腳本 #!/usr/bin/python2 python2腳本 而有時不太清楚腳本解釋器的具體全路徑名;或者開發環境與運行環境的安裝路徑不一樣。爲了保證兼容性,也能夠寫做: #!/usr/bin/env python3
這樣運行時會自動搜索腳本解釋器的絕對路徑。
py文件的默認編碼是ASCII,上面的腳本中不少都是ASCII不支持的,那麼須要指定文件編碼。格式是:oop
#-*- coding: encoding -*-
python 的註釋:學習
多行註釋: 用成對的3個單引號或者3個雙引號組成 (例如當前位置)
單行註釋:使用#
代碼塊:從上面的Foo.py文件中,很容易能夠看出,代碼塊是以 冒號 : 開始的。不管是function定義,if,else,仍是loop(for, while)測試
都是用 : 做爲代碼塊的開始。不是用 { } 來包括代碼塊的。
縮進:Python的程序中,不是用 { } 來包括代碼塊的,用縮進來維持代碼塊的。不要寫 tab,用4個空格爲縮進。
Python中的字符串與JavaScript中的字符串同樣,既可使用單引號,也可使用雙引號。
不會像Shell那樣具有轉義。若是須要對字符轉義,使用 \ ,若是你不想要 字符串內部的 \ 表明轉義,那須要在第一個引號前加上 r 。例如:
#!python #-*- coding: utf-8 -*- ''' Python String, 1)表示字符串:用單引號或者雙引號。他們是等價的,不存在取值轉義等問題 2)字符串內的\表示轉義 3)若是不但願字符串內的\表示轉義,須要在字符串前加上 r 。 4)斷定兩個字符串是否相等,相似於JavaScript,用 == 便可
5)兩個字符串拼接,使用 + 便可
6)String 與 Number 拼接,不能直接使用 +
'''
def testString(): a = 'aaa' b = "aaa" print(a==b) print(a==b) c = "\n" d = r"\n" print(c) print(d) print(c == d) if __name__ == '__main__' : print('current module name is "' + __name__+'"') testString()
#!python #-*- coding: utf-8 -*- ''' Python String, 1)對於數字,Python與JavaScript仍然是相似的,沒有那麼多的限制 2)能夠在數字上直接進行 + - * / 運算 3)String 與 Number 拼接,不能直接使用 + ''' def testNumber(): a = 1 # int b = 1.0 # float c = 1.1 print(a==b) print(b<c) print(a + (b - c * 3) / 2 ) d = "1" print(a == d) print(bytes(1)+d)
相似於JavaScript,Python的boolean也是多變的。
True, False 分別表示真、假
如下幾種狀況是false:
1.None
2.False
3.任何類型的數字0,包括0,0.0,0L,0j
4.空的序列(sequence)或者映射(mapping)類型對象
5.對於用戶自定義類型的對象,若是其類定義了__nonzero__() 或者 __len__()特殊方法而且返回False或者0
對於最後一條規則,有幾點須要說明:
1.若是類沒有定義這兩個方法中的任何一個,則這種類型的對象真值測試時老是爲True
2.若是類同時定義了__nonzero__() 和 __len__(),只會參考__nonzero__()的返回值
如下幾種狀況是false:1.None2.False3.任何類型的數字0,包括0,0.0,0L,0j4.空的序列(sequence)或者映射(mapping)類型對象5.對於用戶自定義類型的對象,若是其類定義了__nonzero__() 或者 __len__()特殊方法而且返回False或者0
對於最後一條規則,有幾點須要說明:1.若是類沒有定義這兩個方法中的任何一個,則這種類型的對象真值測試時老是爲True2.若是類同時定義了__nonzero__() 和 __len__(),只會參考__nonzero__()的返回值
def testBoolean(): a = True b = False print(a!=b) if(3): print("3 is True") if __name__ == '__main__' : print('current module name is "' + __name__+'"') testBoolean()
Python中的變量,能夠分爲 local variable, global variable。
1)local variable 的做用與在一個代碼塊內部
2)global variable 的做用與在一個Python的module (一個 py文件) 內。它屬於模塊對象的。若是 A module 中定義了 一個global 變量 a, B module import 了 A, B仍然不能直接使用 A模塊的global 變量 a(例如不能 print a),而應該經過 A.a來使用。
聲明 global 變量須要使用 global 關鍵字,且有兩步,先聲明後賦值。
聲明local 變量,不須要額外的關鍵字。
#!python #-*- coding: utf-8 -*- ''' 全局變量 ''' global moduleName moduleName = __name__ a = 1 def printModuleName(): print(a+1) print(__name__) print(moduleName) ''' if __name__ == '__main__' : print('current module name is "' + __name__+'"') ''' printModuleName() print(a)
Java中的try ... catch .. finally,在Python中也有相似的處理機制:try ... except ... else ... finally ...
七、參數 * 與 **
在Python中,可變參數用 *表示,本質是有個tuple。 keyworld參數用 **表示