咱們小組的Python學習由王程鵬和劉峻琳負責,學習了Python語言從基礎特性到高級特性的方方面面。總的來講,咱們認識到Python是一種很是強大的語言,它具備大量的牛逼特性,包括支持函數式編程、支持面向對象,除此以外還有一些其它語言不具備的特性,例如切片等,其背後都有高級數據結構的支撐。接下來,咱們將總結從教程中學到的Python的一些用法。其中前半部分爲王程鵬所寫,後半部分由劉峻琳撰寫。那麼,讓咱們趕快開始吧。編程
變量和數據類型數組
Python是一種動態語言,即變量類型能夠隨時修改,和Javascript相似,但與C和JAVA不一樣。例如定義變量:數據結構
a = 123app
以後能夠再給a賦任意類型的值:函數式編程
a = "This is a string!"函數
list和tuple學習
Python內置的一種數據類型是列表:list。list是一種有序的集合,能夠隨時添加和刪除其中的元素。在實際使用的過程當中把它當作數組使用便可。值得注意的是list有append方法向list末尾添加元素。spa
classmates = ['Michael', 'Bob', 'Tracy']
code
>>> classmates.append('Adam')對象
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']
另外一種有序列表叫元組:tuple。tuple和list很是相似,可是tuple一旦初始化就不能修改,好比一樣是列出同窗的名字。
classmates = ('Michael', 'Bob', 'Tracy')
條件判斷與循環
好比作條件判斷,注意if語句行末尾的冒號
if age >= 18:
print 'your age is', age
print 'adult'
或者加入else語句
if age >= 18:
print 'your age is', age
print 'adult'
else:
print 'your age is', age
print 'teenager'
循環這裏涉及到可迭代對象,對全部可迭代對象都可以調用for循環語句便利其中的全部元素。好比dict爲可迭代對象,下面的代碼就是對一個dict作迭代(遍歷)
>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> for key in d:
... print key
a
c
b
dict和set
Python內置了字典:dict的支持,dict全稱dictionary,在其餘語言中也稱爲map,使用鍵-值(key-value)存儲,具備極快的查找速度。好比查找同窗成績,代碼以下:
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
set和dict相似,也是一組key的集合,但不存儲value。因爲key不能重複,因此,在set中,沒有重複的key。要建立一個set,須要提供一個list做爲輸入集合,重複元素會被自動過濾:
>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
set([1, 2, 3])
可用&和|作集合的交和並運算。
>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
set([2, 3])
>>> s1 | s2
set([1, 2, 3, 4])
切片
取list或者tuple的某一段元素時會用到切片操做,經常使用用法以下所示:
>>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
第0個開始到第3個以前
>>> L[0:3]
['Michael', 'Sarah', 'Tracy']
>>> L = range(100)
全部數,每
5
個取一次
>>> L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
甚至什麼都不寫,只寫[:]
就能夠原樣複製一個list。
列表生成式
列表生成式即List Comprehensions,是Python內置的很是簡單卻強大的能夠用來建立list的生成式。
若是要生成1到100全部徹底平方數的列表。
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
一行代碼便可解決問題
生成器
和列表生成式不一樣的是,把最外面的
[]
改成()即爲生成器,它也是可迭代的。
>>> g = (x * x for x in range(10))
>>> for n in g:
... print n
最終輸出的即爲1到100共10個徹底平方數。
函數
Python的函數中不少不一樣於常見語言的特性,但咱們仍是從基礎提及。在Python中定義函數須要用到關鍵字def,例如:
def add(a, b):
return a + b
能夠用pass關鍵字定義一個空函數:
def nop();
pass
Python中的函數能夠返回多個值,其本就是返回一個tuple。好比:遊戲中常常須要從一個點移動到另外一個點,給出座標、位移和角度,就能夠計算出新的新的座標:
import math
def move(x, y, step, angle=0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
調用系統函數時,Python會自動進行參數匹配檢查,而調用自定義函數時,沒有自動參數檢查,所以最好在函數體內進行人工的參數檢查。
Python的強大之處在於它支持多種格式的函數參數,包括默認參數、可變參數、自定義參數。其中默認參數和C相似,咱們只說明可變參數和關鍵字參數。
可變參數,即利用list和tuple實現以不一樣的參數個數調用同一個函數,可變參數的前面要加上*號:
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n
return sum
有以下調用結果:
>>>calc(1,2,3)
6
>>>calc(1,2,3,4)
10
關鍵字參數也容許傳入數量不定的參數,但會將這些參數組裝成一個tuple。
函數的參數能夠由普通、默認、可變、關鍵字參數四種參數組成,但必須聽從這個順序。
面向對象
如前文所述,Python具備和C++同樣的面向對象的特性,這讓咱們能夠利用類來實現對數據和方法的封裝:
class Student(object):
pass
定義了一個空類。若是定義的類沒有特定的父類,就指定從object繼承。
bart = Student()
定義了一個對象的實例。能夠自由地給對象賦予屬性:
bart.name = 'Liu Junlin'
也能夠在定義類時規定必要屬性:
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
類的成員函數第一個參數永遠都是self,但調用時不須要傳遞。
定義必需屬性時加上兩個下劃線,則表明是私有成員,從外部沒法訪問:
class Student(object):
def __init__(self, name):
self.__name = name
Python類的繼承性和多態性與C++相似,在此不贅述。
錯誤處理
和衆多高級語言同樣,Python也有相似try-catch這樣的錯誤處理機制,例如:
try:
print 'try...'
r = 10 / int('a')
print 'result:', r
except ValueError, e:
print 'ValueError:', e
except ZeroDivisionError, e:
print 'ZeroDivisionError:', e
else:
print 'no error!'
finally:
print 'finally...'
print 'END'
其中try爲可能會拋出錯誤的代碼段,和其它語言相似。except爲捕捉錯誤的代碼段,和catch相似。拋出的錯誤可能有多種類型,因此可能須要多個except語句。else爲可選項,處理沒有錯誤的狀況。finally也是可選代碼段,當執行完一個except或else代碼段以後執行。