Python 學習報告

咱們小組的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代碼段以後執行。

相關文章
相關標籤/搜索