Python 學習 第五篇:語句和語法


Python程序是語句構成的,語句包含表達式,表達式嵌套在語句中,包含變量和常量,用於處理對象。Python的語法實質上是由表達式、語句和代碼塊構成的。語句是由表達式構成的,代碼塊是由多個語句構成的復合語句。

代碼塊是具有一定格式的多個語句,在Python中,垂直對齊的語句是一個代碼塊,代碼塊以冒號:開始,以結束縮進為結束。典型的代碼塊如下所示:

if x >y :
    print('x>y') print(x-y) else : print('x<=y')

Python語法的特點是:

  • 測試條件的兩端不需要小括號,例如  if x<y 是完全正確的。
  • 語句的終止不需要以分號結尾,一行的結束會自動終止該行的語句;
  • 縮進的結束就是代碼塊的結束,Python以垂直對齊的方式來組織代碼塊;
  • Python只能使用單行注釋,#之后的文本作為注釋內容。
  • Python中的所有語句都是實時運行的,並沒有獨立的編譯時間。

一,變量命名

變量是表達式的重要組成部分,Python程序離不開變量,變量是對象的引用,對象是存儲數據的結構。

1,變量命名規則

  • 變量名以 下划線或字母 開頭,后面接任意數目的字符、數字或下划線;
  • 變量名是區分大小寫的,包括創建的變量名以及保留字;
  • 自定義的變量名不能使用保留字。

2,命名慣例

  • 以單一下划線開頭的變量名(_x)不會被from module import * 語句導入;
  • 前后有下划線的變量名是系統定義的變量名(__xx__),對解釋器有特殊意義;
  • 以雙下划線開頭,但結尾沒有下划線的變量名(__xx)是類的本地變量;
  • 通過交互模式運行時,只有單個下划線(_)的變量名會保存最后表達式的結果

二,Python的語法風格

Python的復合語句都是首行以:結尾,然后是嵌套的語句塊,嵌套的語句塊是由相同縮進的語句構成的。

header_line :
    nested_statement_1
    nested_statement_2
    ...

1,縮進

不需要在代碼中輸入任何語法上用來表名嵌套代碼塊的開始和結尾,取而代之的是,把嵌套代碼語句向右縮進相同的距離,Python使用語句的實際縮進來確定代碼塊的開始和結尾。

所謂縮進,是指嵌套語句左側的空白,Python並不在乎怎么縮進(可以使用空格或制表符)或者縮進多少(可以使用任意多個空格或制表符),強烈推薦使用一個制表符代表一個縮進。

語法規則規定:一個單獨的嵌套代碼塊中的所有語句必須縮進相同的距離,否則,就會出現語法錯誤。

2,多行語句

Python語句一個語句橫跨多行,只需要使用一對括號就可以了:小括號,中括號,大括號。任何括在括號中的程序代碼都可橫跨多行。語句會一直運行,直到Python遇到關閉的括號。

mlist=[1,2,3] x=(a+b +c+d) if (a==1 and b==2):   print('OK')

三,賦值語句

Python中賦值語句把對象賦給一個變量名,基本形式是由表達式,變量和 = 構成的,左側可以是變量名或對象元素,右側是表達式。例如,賦值語句基本形式是:a=1,把1賦值給變量a

賦值語句的特性是:

  • 賦值語句建立變量名和對象之間的引用,而不是復制對象;
  • 變量名在首次賦值時會被創建;
  • 變量名在引用前必須賦值。

1,賦值語句的基本形式

使用賦值符號=,把1賦值給變量a,通常情況下,使用基本賦值語句就可以滿足程序設計的需要:

a=1

2,序列賦值

序列是指元組,列表和字符串,當在”=“左邊編寫成元組或列表時,Python把右邊的對象和左邊的變量從左至右按照位置相互匹配,注意:變量的數量和序列項的數量必須一致。

元組賦值形式,把1,2,3分別賦值給變量a,b,c:

a,b,c=1,2,3

列表賦值形式,把3,4,5分別賦值給變量a,b,c:

[a,b,c]=[3,4,5]

序列賦值運算,把字符串序列中的字符分別賦值給a,b,c:

>>> a,b,c='123'
>>> a,b,c
('1', '2', '3')

符合賦值運算,字符串既可以看作是一個序列,也可以看作是一個對象:

>>> ((a,b),c)='12','345'
>>> a,b,c
('1', '2', '345')

3,多目標賦值運算

多目標賦值運算,實現多個變量共享同一個對象,例如,把5賦值給變量a,b,c,可以認為先把5賦值給c,然后把c賦值給b,最后,把b賦值給a。

a=b=c=5

注意:多目標賦值語句只創建一個變量,三個變量全部指向內存中的同一對象。

當多個變量共享的對象是不可變對象時,由於不支持在原處修改,當對其中一個變量重新賦值,其他變量的值不變。Python會新建一個對象給該變化的變量。

>>> a=b=c=5
>>> c=6
>>> a,b,c
(5, 5, 6)

當多個變量共享的對象是可變對象時,由於支持在原處修改,當對其中一個變量重新賦值時,其他變量的值會改變。

>>> a=b=c=[1]
>>> a[0]=2
>>> a,b,c ([2], [2], [2])

為了避免這個問題,需要單獨為每個變量賦值,以便分別初始化變量。

4,擴展序列解包(Python 3.0)

變量前面帶有星號(*var),該變量收集了序列中沒有賦值給其他變量的所有項。在一個賦值語句中,只能出現一個變量名前面帶有星號,並且該項的類型是列表:

例如,把元組(1,2,3,4)賦值給變量a和b,a匹配序列中的第一項,b匹配序列中剩下的所有項:

>>> a,*b=1,2,3,4
>>> a,b
(1, [2, 3, 4])

四,分支結構

Python的分支結構有三個關鍵字:if,elif,else,分支結構的一般形式是:

if test1:
    statement1
elif test2: statement2 else: statement3

如果test1為True,那么執行statement1;

如果test1為False,那么執行elif語句,測試test2,如果為True,那么執行statement2;如果為False,那么執行else語句塊的statement3。

分支結構的特點是:

  • 在多分支結構中,if是必需的,且只有一個,處於分支結構的開頭;
  • elif是可選的,可以有0,1和多個elif子句;
  • else也是可選的,可以有0和1個,並且只能處於分支結構的末尾。

和C語言一樣,Python同樣有一個三元表達式:x=a if test else b

其等價的if表達式是:

if test:
    x=a else: x=b 

五,循環結構

Python的主要循環結構是while語句和for語句,while語句用於編寫通用循環,而for語句用於遍歷序列對象內的元素。

Python控制循環的關鍵字:

  • break:離開循環,從當前行跳出循環,執行循環語句后面的語句;
  • continue:從當前行跳到循環的首行,繼續循環。

1,while循環

while循環的一般格式是由測試表達式,循環執行的語句塊,和一個可選的else語句塊。while語句通過loop_body修改test條件來控制循環的次數,或者使用break來跳離while循環。

while test :
    loop_body
else: statement_not_hit_break

當控制權離開循環體,且沒有遇到break語句時執行else語句塊。如果循環體從來沒有執行過,那么else語句塊也會執行。

2,for循環

for循環是一個通用的序列迭代器,可以遍歷任何有序對象內的元素。for語句可以用於字符串、列表、元組和其他可迭代對象。

for循環的一般格式是成員賦值,循環執行的語句塊,和一個可選的else語句塊。當遍歷完序列的所有元素,或者遇到break語句時,結束for循環。

for obj in seq:
    loop_body
else: statement_not_hit_break

當Python運行for循環時,會逐個把序列中的元素賦值給obj,然后為每個元素執行一次循環體(loop_body)。

for首行中用作賦值的變量名,可以在循環體中修改,但是,當循環回到首行時,obj就會被設置成序列中的下一個元素。

當序列中的元素是序列時,可以設置obj為序列對象,用於接受序列的元素,例如,序列中的元素是元組,設置obj為元組對象,用於接收序列的元素:

>>> for (a,b,c) in [(1,2,3),(4,5,6)]: print(a,b,c)
...
1 2 3
4 5 6

參考文檔:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM