《簡明Python教程(A Byte of Python)》: http://woodpecker.org.cn/abyteofpython_cn/chinese/index.html
Python的創造者是Guido van Rossum。
Python的官方介紹是:“Python是一種簡單易學,功能強大的程式設計語言,它有高效率的高層資料結構,簡單而有效地實現物件導向編程。Python簡潔的文法和對動態輸入的支援,再加上解釋性語言的本質,使得它在大多數平台上的許多領域都是一個理想的指令碼語言,特別適用於快速的應用程式開發。”
特點:文法簡單,無需管理記憶體,可移植性,是解釋型語言,可嵌入c/c++等程式,帶有龐大的標準庫,免費開源。
數有四種類型:整數,長整數,浮點數,複數(-5+4j)。
字串:可用成對的單引號或雙引號,另外還可用三個單引號,包含多行字串,其中可任意使用單引號雙引號,如'''sam'p'le '''。(Python沒有char類型)
變數:無需聲明或定義資料類型,直接賦值。像basic語言。
代碼:一個語句可以分號結尾或者省去分號,直接斷行符號
Python代碼的階層完全依靠縮排,不依靠 { } 。
運算子:和c類似,不同在於:**乘方,//整除,^異或,~按位翻轉(x的按位翻轉是-(x+1),~5是6),布爾操作“非”“與”“或”分別是not, and, or,和c的!, &&, ||不同。
注釋:以井號#開頭,不使用c/c++的注釋符號,應該是為了遵循Unix的指令碼習慣吧。
控制語句
條件控制:if elif else 和c類似,不過不使用括弧,句末加上冒號:。Python沒有switch語句,可以使用if elif else或字典。
while迴圈:while else (else為可選)
for迴圈:for i in range(1, 5): 注意range(1, 5)表示[1, 2, 3, 4],相當於c的for (int i = 1; i < 5; i++)。range預設步長是1,range(1, 5, 2)表示步長為2,[1, 3]。
break: 用於終止迴圈,else不會被執行。
函數
用def定義,例如 def func1(a, b=1): 第二個參數具有預設值。可如此調用func1(1) func1(1, 2) func1(b=2, a=3)改變參數順序
函數參數是傳值的。
變數具有範圍,可通過global來聲明全域變數
return語句:如果沒有返回,相當於寫成return None
pass語句:表示空的語句塊,例如 def func(): pass
文檔字串DocString:每個函數(或模組、類)的第一個邏輯行的字串是文檔字串。通常是一個多行字串,首行以大寫字母開始,句號結尾。第二行空行,第三行是詳細描述。可以func.__doc__列印出來
模組:通過import匯入模組。模組副檔名必須是.py。位元組編譯過的模組是.pyc,可加快模組載入速度,與平台無關。模組就是一個單獨的.py檔案。沒什麼特殊之處。
資料結構:內建三種資料結構:列表list、元組tuple和字典。
list: 可增刪查的列表。alist = ['a', 'b', 'c']
元組tuple: 不可變的列表。atuple = ('a', 'b', 'c') 空元組直接(),但一個成員的元組必須加上逗號 atuple = ('a', )為了區分元組和運算式中一個帶圓括弧的對象。元祖用處最多的地方是列印,如 print '%s is %d' % (var0, var1)
字典dict: d = {key1: value1, key2:value2} 用d['key']來獲得值
列表、元組都可以使用索引index來訪問成員,如alist[0]。index可以為負數,-1表示序列的最後一個元素。
列表直接賦值不會產生列表的拷貝,相當於只是Pointer複製。如list2 = list1兩者完全相同。list2 = list1[:]這樣才會產生新拷貝。
class類: 和其他oo類似。但類的函數參數第一個必須是self,調用時不需要加self。初始化用__init__。顯式刪除對象用__del__。
class
Person
:
def
__init__
(self, name):
self.name = name
def
sayHi
(self):
print
'Hello, my name is'
, self.name
p = Person(
'Swaroop'
)
p.sayHi()
class的繼承:子類__init__不會自動調用基類的__init__
class Male(Person):
def__init__(self, name, salary):
Person.__init__(self, name)
self.salary = salary
輸入輸出
檔案
讀方式開啟 f = file('aaa.txt')
讀一行(包含斷行符號) line = f.readline()
寫方式開啟 f = file('aaa.txt', 'w')
寫入 f.write('abc')
關閉 f.close()
儲存空間pickle,可在檔案中持久儲存任何Python對象。
import cPickle as p
f = file("a.dat", 'w')
p.dump(['a', 'b'], f)
f.close()
f = file('a.dat')
alist = p.load(f)
異常處理
try:
except EOFError:
except:
自訂異常類型
class
ShortInputException
(Exception):
'''A user-defined exception class.'''
def
__init__
(self, length, atleast):
Exception.__init__(self)
self.length = length
self.atleast = atleast
try
:
s =
raw_input
(
'Enter something --> '
)
if
len
(s) <
3
:
raise ShortInputException(
len
(s),
3
)
# Other work can continue as usual here
except
EOFError:
print
'\nWhy did you do an EOF on me?'
except
ShortInputException, x:
print
'ShortInputException: The input was of length %d, \
was expecting at least %d'
% (x.length, x.atleast)
else
:
print
'No exception was raised.'
lambda建立函數對象
def
make_repeater
(n):
return lambda
s: s*n
twice = make_repeater(
2
)
print
twice(
'word'
)
print
twice(
5
)
輸出
$ python lambda.py
wordword
10
Python, 學習筆記