歡迎光臨
每天分享高質量文章

輕鬆學Python基礎知識彙總

Python基礎01 Hello World!

Python命令列

假設你已經安裝好了Python, 那麼在命令提示符輸入:

python

將直接進入python。然後在命令列提示符>>>後面輸入:

>>>print(‘Hello World!’)

可以看到,隨後在螢幕上輸出:

print是一個常用函式,其功能就是輸出括號中得字串。

(在Python 2.x中,print還可以是一個關鍵字,可寫成print ‘Hello World!’,但這在3.x中行不通 )

寫一段小程式

另一個使用Python的方法,是寫一個Python程式。用文字編輯器寫一個.py結尾的檔案,比如說hello.py

hello.py中寫入如下,並儲存:

print('Hello World!')

退出文字編輯器,然後在命令列輸入:

$python hello.py

來執行hello.py。可以看到Python隨後輸出

Hello World!

Python基礎02 基本資料型別

變數不需要宣告

Python的變數不需要宣告,你可以直接輸入:

>>>a = 10

那麼你的記憶體裡就有了一個變數a, 它的值是10,它的型別是integer (整數)。 在此之前你不需要做什麼特別的宣告,而資料型別是Python自動決定的。

>>>print(a)

>>>print(type(a))

那麼會有如下輸出:

10

這裡,我們學到一個內建函式type(), 用以查詢變數的型別。

回收變數名

如果你想讓a儲存不同的資料,你不需要刪除原有變數就可以直接賦值。

>>>a = 1.3

>>>print(a,type(a))

會有如下輸出

 1.3

我們看到print的另一個用法,也就是print後跟多個輸出,以逗號分隔。

基本資料型別

a=10         # int 整數

a=1.3        # float 浮點數

a=True       # 真值 (True/False)

a=’Hello!’   # 字串。字串也可以用雙引號。

以上是最常用的資料型別。此外還有分數,字元,複數等其他型別,有興趣的可以學習一下。

變數不需要宣告,不需要刪除,可以直接回收適用。

type(): 查詢資料型別

整數,浮點數,真值,字串

Python基礎03 序列

sequence 序列

sequence(序列)是一組有順序元素集合

(嚴格的說,是物件的集合,但鑒於我們還沒有引入“物件”概念,暫時說元素)

 

序列可以包含一個或多個元素,也可以沒有任何元素。

我們之前所說的基本資料型別,都可以作為序列的元素。元素還可以是另一個序列,以及我們以後要介紹的其他物件。

 

序列有兩種:tuple(定值表; 也有翻譯為元組) 和 list ()

>>>s1 = (2, 1.3, ‘love’, 5.6, 9, 12, False)         # s1是一個tuple

>>>s2 = [True, 5, ‘smile’]                          # s2是一個list

>>>print(s1,type(s1))

>>>print(s2,type(s2))

tuple和list的主要區別在於,一旦建立,tuple的各個元素不可再變更,而list的各個元素可以再變更

一個序列作為另一個序列的元素

>>>s3 = [1,[3,4,5]]

空序列

>>>s4 = []

 

元素的取用

序列元素的下標從0開始:

>>>print(s1[0])

>>>print(s2[2])

>>>print(s3[1][2])

由於list的元素可變更,你可以對list的某個元素賦值:

>>>s2[1] = 3.0

>>>print(s2)

如果你對tuple做這樣的操作,會得到錯誤提示。

所以,可以看到,序列的取用透過s[]實現, int為下標

 

其他取用方式

範圍取用: 基本樣式[下限:上限:步長]

>>>print(s1[:5])             # 從開始到下標4 (下標5的元素 不包括在內)

>>>print(s1[2:])             # 從下標2到最後

>>>print(s1[0:5:2])          # 從下標0到下標4 (下標5不包括在內),每隔2取一個元素 (下標為0,2,4的元素)

>>>print(s1[2:0:-1])         # 從下標2到下標1

從上面可以看到,在範圍取用的時候,如果寫明上限,那麼這個上限本身不包括在內

尾部元素取用

>>>print(s1[-1])             # 序列最後一個元素

>>>print(s1[-3])             # 序列倒數第三個元素

同樣,如果s1[0:-1], 那麼最後一個元素不會被取用 (再一次,不包括上限元素本身

 

字串是元組

字串是一種特殊的元組,因此可以執行元組的相關操作。

>>>str = ‘abcdef’

>>>print(str[2:4])

tuple元素不可變,list元素可變

序列的取用 s[2], s[1:8:2]

字串是一種tuple

Python基礎04 運算

數學運算

>>>print 1+9        # 加法

>>>print 1.3-4      # 減法

>>>print 3*5        # 乘法

>>>print 4.5/1.5    # 除法

>>>print 3**2       # 乘方     

>>>print 10%3       # 求餘數

 

判斷

判斷是真還是假,傳回True/False

>>>print 5==6               # =, 相等

>>>print 8.0!=8.0           # !=, 不等

>>>print 3<3, 3<=3          #

>>>print 4>5, 4>=0          # >, 大於; >=, 大於等於

>>>print 5 in [1,3,5]       # 5是list [1,3,5]的一個元素

(還有is, is not等, 暫時不深入)

 

邏輯運算

True/False之間的運算

>>>print True and True, True and False      # and, “與”運算, 兩者都為真才是真

>>>print True or False                      # or, “或”運算, 其中之一為真即為真

>>>print not True                           # not, “非”運算, 取反

可以和上一部分結合做一些練習,比如:

>>>print 5==6 or 3>=3

數學 +, -, *, /, **, %

判斷 ==, !=, >, >=,

邏輯 and, or, not

Python基礎05 縮排和選擇

縮排

Python最具特色的是用縮排來標明成塊的程式碼。我下麵以if選擇結構來舉例。if後面跟隨條件,如果條件成立,則執行歸屬於if的一個程式碼塊。

 

先看C語言的表達方式(註意,這是C,不是Python!

如果i > 0的話,我們將進行括號中所包括的兩個賦值操作。括號中包含的就是塊操作,它隸屬於if。

在Python中,同樣的目的,這段話是這樣的

在Python中, 去掉了i > 0周圍的括號,去除了每個陳述句句尾的分號,表示塊的花括號也消失了。

多出來了if …之後的:(冒號), 還有就是x = 1 和 y =2前面有四個空格的縮排。透過縮排,Python識別出這兩個陳述句是隸屬於if。

 Python這樣設計的理由純粹是為了程式好看。

 if陳述句

寫一個完整的程式,命名為ifDemo.py。這個程式用於實現if結構。

$python ifDemo.py  # 執行

程式執行到if的時候,條件為True,因此執行x = x+1,。

print x陳述句沒有縮排,那麼就是if之外。

如果將第一句改成i = -1,那麼if遇到假值 (False), x = x+1隸屬於if, 這一句跳過。 print x沒有縮排,是if之外,不跳過,繼續執行。

這種以四個空格的縮排來表示隸屬關係的書寫方式,以後還會看到。強制縮排增強了程式的可讀性

複雜一些的if選擇:

這裡有三個塊,分別屬於if, elif, else引領。
Python檢測條件,如果發現if的條件為假,那麼跳過後面緊跟的塊,檢測下一個elif的條件; 如果還是假,那麼執行else塊。
透過上面的結構將程式分出三個分支。程式根據條件,只執行三個分支中的一個。


整個if可以放在另一個if陳述句中,也就是if結構的巢狀使用:

if i > 2 後面的塊相對於該if縮排了四個空格,以表明其隸屬於該if,而不是外層的if。

if陳述句之後的冒號

以四個空格的縮排來表示隸屬關係, Python中不能隨意縮排

if  :

    statement

elif :

    statement

elif :

    statement

else:

    statement

Python基礎07 函式

函式最重要的目的是方便我們重覆使用相同的一段程式。

將一些操作隸屬於一個函式,以後你想實現相同的操作的時候,只用呼叫函式名就可以,而不需要重覆敲所有的陳述句。

 函式的定義

首先,我們要定義一個函式, 以說明這個函式的功能。

def square_sum(a,b):
    c = a**2 + b**2    return c

這個函式的功能是求兩個數的平方和。

首先,def,這個關鍵字通知python:我在定義一個函式。square_sum是函式名。

括號中的a, b是函式的引數,是對函式的輸入。引數可以有多個,也可以完全沒有(但括號要保留)。

我們已經在迴圈和選擇中見過冒號縮排來表示的隸屬關係。

c = a**2 + b**2        # 這一句是函式內部進行的運算

return c               # 傳回c的值,也就是輸出的功能。Python的函式允許不傳回值,也就是不用return。

return可以傳回多個值,以逗號分隔。相當於傳回一個tuple(定值表)。

return a,b,c          # 相當於 return (a,b,c)

 

在Python中,當程式執行到return的時候,程式將停止執行函式內餘下的陳述句。return並不是必須的,當沒有return, 或者return後面沒有傳回值時,函式將自動傳回None。None是Python中的一個特別的資料型別,用來表示什麼都沒有,相當於C中的NULL。None多用於關鍵字引數傳遞的預設值。

 函式呼叫和引數傳遞

定義過函式後,就可以在後面程式中使用這一函式

print square_sum(3,4)

Python透過位置,知道3對應的是函式定義中的第一個引數a, 4對應第二個引數b,然後把引數傳遞給函式square_sum。

(Python有豐富的引數傳遞方式,還有關鍵字傳遞、表傳遞、字典傳遞等,基礎教程將只涉及位置傳遞)

函式經過運算,傳回值25, 這個25被print打印出來。

 我們再看下麵兩個例子

第一個例子,我們將一個整數變數傳遞給函式,函式對它進行操作,但原整數變數a不發生變化

第二個例子,我們將一個表傳遞給函式,函式進行操作,原來的表b發生變化

對於基本資料型別的變數,變數傳遞給函式後,函式會在記憶體中複製一個新的變數,從而不影響原來的變數。(我們稱此為值傳遞

但是對於表來說,表傳遞給函式的是一個指標,指標指向序列在記憶體中的位置,在函式中對錶的操作將在原有記憶體中進行,從而影響原有變數。 (我們稱此為指標傳遞

Python基礎09 面向物件的進一步拓展

呼叫類的其它資訊

上一講中提到,在定義方法時,必須有self這一引數。這個引數表示某個物件。物件擁有類的所有性質,那麼我們可以透過self,呼叫類屬性

這裡有一個類屬性laugh。在方法show_laugh()中,透過self.laugh,呼叫了該屬性的值。

 還可以用相同的方式呼叫其它方法。方法show_laugh(),在方法laugh_100th中()被呼叫。

 透過物件可以修改類屬性值。但這是危險的。類屬性被所有同一類及其子類的物件共享。類屬性值的改變會影響所有的物件。

__init__()方法

__init__()是一個特殊方法(special method)。Python有一些特殊方法。Python會特殊的對待它們。特殊方法的特點是名字前後有兩個下劃線

如果你在類中定義了__init__()這個方法,建立物件時,Python會自動呼叫這個方法。這個過程也叫初始化

這裡繼承了Bird類,它的定義見上一講。

 

螢幕上列印:

We are happy birds.Happy,Happy!

我們看到,儘管我們只是建立了summer物件,但__init__()方法被自動呼叫了。最後一行的陳述句(summer = happyBird…)先建立了物件,然後執行:

summer.__init__(more_words)

‘Happy,Happy!’ 被傳遞給了__init__()的引數more_words

 

物件的性質

我們講到了許多屬性,但這些屬性是類的屬性。所有屬於該類的物件會共享這些屬性。比如說,鳥都有羽毛,雞都不會飛。

在一些情況下,我們定義物件的性質,用於記錄該物件的特別資訊。比如說,人這個類。性別是某個人的一個性質,不是所有的人類都是男,或者都是女。這個性質的值隨著物件的不同而不同。李雷是人類的一個物件,性別是男;韓美美也是人類的一個物件,性別是女。

 

當定義類的方法時,必須要傳遞一個self的引數。這個引數指代的就是類的一個物件。我們可以透過操縱self,來修改某個物件的性質。比如用類來新建一個物件,即下麵例子中的li_lei, 那麼li_lei就被self表示。我們透過賦值給self.attribute,給li_lei這一物件增加一些性質,比如說性別的男女。self會傳遞給各個方法。在方法內部,可以透過取用self.attribute,查詢或修改物件的性質。

這樣,在屬性的之外,又給每個物件增添了各自特色的性質,從而能描述多樣的世界。

在初始化中,將引數input_gender,賦值給物件的性質,即self.gender。

li_lei擁有了物件性質gender。gender不是一個類屬性。Python在建立了li_lei這一物件之後,使用li_lei.gender這一物件性質,專門儲存屬於物件li_lei的特有資訊。

 

物件的性質也可以被其它方法呼叫,呼叫方法與類屬性的呼叫相似,正如在printGender()方法中的呼叫。

Python基礎10 反過頭來看看

最初的“Hello World”,走到面向物件。該回過頭來看看,教程中是否遺漏了什麼。

我們之前提到一句話,”Everything is Object”. 那麼我們就深入體驗一下這句話。

 

需要先要介紹兩個內建函式,dir()help()

dir()用來查詢一個類或者物件所有屬性。你可以嘗試一下

>>>print dir(list)

help()用來查詢的說明檔案。你可以嘗試一下

>>>print help(list)

(list是Python內建的一個類,對應於我們之前講解過的串列)

 

list是一個類

在上面以及看到,表是Python已經定義好的一個類。當我們新建一個表時,比如:

>>>nl = [1,2,5,3,5]

實際上,nl是類list的一個物件。

 

實驗一些list的方法:

>>>print nl.count(5)       # 計數,看總共有多少個5

>>>print nl.index(3)       # 查詢 nl 的第一個3的下標

>>>nl.append(6)            # 在 nl 的最後增添一個新元素6

>>>nl.sort()               # 對nl的元素排序

>>>print nl.pop()          # 從nl中去除最後一個元素,並將該元素傳回。

>>>nl.remove(2)            # 從nl中去除第一個2

>>>nl.insert(0,9)          # 在下標為0的位置插入9

總之,list是一個類。每個串列都屬於該類。

Python補充中有list常用方法的附錄。

 

運運算元是特殊方法

使用dir(list)的時候,能看到一個屬性,是__add__()。從形式上看是特殊方法(下劃線,下劃線)。它特殊在哪呢?

這個方法定義了”+”運運算元對於list物件的意義,兩個list的物件相加時,會進行的操作。

>>>print [1,2,3] + [5,6,9]

 

運運算元,比如+, -, >, 方法

 

嘗試一下

>>>print [1,2,3] – [3,4]

會有錯誤資訊,說明該運運算元“-”沒有定義。現在我們繼承list類,新增對”-“的定義

內建函式len()用來傳回list所包含的元素的總數。內建函式__sub__()定義了“-”的操作:從第一個表中去掉第二個表中出現的元素。如果__sub__()已經在父類中定義,你又在子類中定義了,那麼子類的物件會參考子類的定義,而不會載入父類的定義。任何其他的屬性也是這樣。

(教程最後也會給出一個特殊方法的清單)

 

定義運運算元對於複雜的物件非常有用。舉例來說,人類有多個屬性,比如姓名,年齡和身高。我們可以把人類的比較(>,

 

下一步

希望你已經對Python有了一個基本瞭解。你可能躍躍欲試,要寫一些程式練習一下。這會對你很有好處。

但是,Python的強大很大一部分原因在於,它提供有很多已經寫好的,可以現成用的物件。我們已經看到了內建的比如說list,還有tuple等等。它們用起來很方便。在Python的標準庫裡,還有大量可以用於作業系統互動,Internet開發,多執行緒,文字處理的物件。而在所有的這些的這些的基礎上,又有很多外部的庫包,定義了更豐富的物件,比如numpy, tkinter, django等用於科學計算,GUI開發,web開發的庫,定義了各種各樣的物件。對於一般使用者來說,使用這些庫,要比自己去從頭開始容易得多。我們要開始攀登巨人的肩膀了。

謝謝你的關註,

歡迎來到Python的世界。

作者:Vamei

源自:http://www.cnblogs.com/vamei/archive/2012/06/02/2532274.html

宣告:文章著作權歸作者所有,如有侵權,請聯絡小編刪除

贊(0)

分享創造快樂