Python基本語法

目錄
縮進
流程控制語句
表達式
函數
對象的方法
類型
數學運算python

縮進
Python開發者有意讓違反了縮進規則的程序不能經過編譯,以此來強制程序員養成良好的編程習慣。而且Python語言利用縮進表示語句塊的開始和退出(Off-side規則),而非使用花括號或
者某種關鍵字。增長縮進表示語句塊的開始,而減小縮進則表示語句塊的退出。縮進成爲了語法的一部分。例如if語句:程序員

if age < 21:
    print("你不能買酒。")
    print("不過你能買口香糖。")
print("這句話處於if語句塊的外面。")

注:上述例子爲python 3.0版本的代碼正則表達式

根據PEP的規定,必須使用4個空格來表示每級縮進(不清楚4個空格的規定如何,在實際編寫中能夠自定義空格數,可是要知足每級縮進間空格數相等)。使用Tab字符和其它數目的空格雖然
均可以編譯經過,但不符合編碼規範。支持Tab字符和其它數目的空格僅僅是爲兼容很舊的的Python程序和某些有問題的編輯程序。算法

流程控制語句
if語句,當條件成立時運行語句塊。常常與else, elif(至關於else if) 配合使用。
for語句,遍歷列表、字符串、字典、集合等迭代器,依次處理迭代器中的每一個元素。
while語句,當條件爲真時,循環運行語句塊。
try語句。與except,finally配合使用處理在程序運行中出現的異常狀況。
class語句。用於定義類型。
def語句。用於定義函數和類型的方法。
pass語句。表示此行爲空,不運行任何操做。
assert語句。用於程序調適階段時測試運行條件是否知足。
with語句。Python2.6之後定義的語法,在一個場景中運行語句塊。好比,運行語句塊前加密,而後在語句塊運行退出後解密。
yield語句。在迭代器函數內使用,用於返回一個元素。自從Python 2.5版本之後。這個語句變成一個運算符。
raise語句。製造一個錯誤。
import語句。導入一個模塊或包。
from import語句。從包導入模塊或從模塊導入某個對象。
import as語句。將導入的對象賦值給一個變量。
in語句。判斷一個對象是否在一個字符串/列表/元組裏。編程

表達式
Python的表達式寫法與C/C++相似。只是在某些寫法有所差異。less

主要的算術運算符與C/C++相似。
+, -, *, /, //, **, ~, %分別表示加法或者取正、減法或者取負、乘法、除法、整除、乘方、取補、取模。
>>, <<表示右移和左移。
&, |, ^表示二進制的AND, OR, XOR運算。
>, <, ==, !=, <=, >=用於比較兩個表達式的值,分別表示大於、小於、等於、不等於、小於等於、大於等於。
在這些運算符裏面,~, |, ^, &, <<, >>必須應用於整數。dom

Python使用and, or, not表示邏輯運算。編程語言

is, is not用於比較兩個變量是不是同一個對象。in, not in用於判斷一個對象是否屬於另一個對象。ide

Python列表推導式
列表推導式(list comprehension)是利用其餘列表建立新列表(相似於數學術語中的集合推導式)的一種方法。它的工做方式相似於for循環,也很簡單:函數

In [39]: [x*x for x in range(10)]
Out[39]: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

若是隻想打印出那些能被3整除的平方數,只須要經過添加一個if部分在推導式中就能夠完成:

In [41]: [x*x for x in xrange(10) if x % 3 == 0]
Out[41]: [0, 9, 36, 81]

也能夠增長更多的for語句的部分:

In [42]: [(x,y) for x in range(3) for y in range(3)]
Out[42]: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]

In [43]: [[x,y] for x in range(2) for y in range(2)]
Out[43]: [[0, 0], [0, 1], [1, 0], [1, 1]]

Python使用lambda表示匿名函數。匿名函數體只能是表達式。好比:

>>> add=lambda x, y : x + y
>>> add(3,2)
5

Python使用y if cond else x表示條件表達式。意思是當cond爲真時,表達式的值爲y,不然表達式的值爲x。至關於C++和Java裏的cond?y:x。

Python區分列表(list)和元組(tuple)兩種類型。list的寫法是[1,2,3],而tuple的寫法是(1,2,3)。能夠改變list中的元素,而不能改變tuple。在某些狀況下,tuple的括號能夠省略。tuple
對於賦值語句有特殊的處理。所以,能夠同時賦值給多個變量,好比:
>>> x, y=1,2#同時給x,y賦值,最終結果:x=1, y=2
特別地,可使用如下這種形式來交換兩個變量的值:
>>> x, y=y, x #最終結果:y=1, x=2

Python使用'(單引號)和"(雙引號)來表示字符串。與Perl、Unix Shell語言或者Ruby、Groovy等語言不同,兩種符號做用相同。通常地,若是字符串中出現了雙引號,就使用單引號來表示
字符串;反之則使用雙引號。若是都沒有出現,就依我的喜愛選擇。出如今字符串中的\(反斜槓)被解釋爲特殊字符,好比\n表示換行符。表達式前加r指示Python不解釋字符串中出現的\。這
種寫法一般用於編寫正則表達式或者Windows文件路徑。

Python支持列表切割(list slices),能夠取得完整列表的一部分。支持切割操做的類型有str, bytes, list, tuple等。它的語法是...[left:right]或者...[left:right:stride]。假定nums
變量的值是[1, 3, 5, 7, 8, 13, 20],那麼下面幾個語句爲真:
nums[2:5] == [5, 7, 8] 從下標爲2的元素切割到下標爲5的元素,但不包含下標爲5的元素。
nums[1:] == [3, 5, 7, 8, 13, 20] 切割到最後一個元素。
nums[:-3] == [1, 3, 5, 7] 從最開始的元素一直切割到倒數第3個元素。
nums[:] == [1, 3, 5, 7, 8, 13, 20] 返回全部元素。改變新的列表不會影響到nums。
nums[1:5:2] == [3, 7] 從下標爲1的元素切割到下標爲5的元素但不包含下標爲5的元素,且步長爲2。

函數
Python的函數支持遞歸、默認參數值、可變參數,但不支持函數重載。爲了加強代碼的可讀性,能夠在函數後書寫「文檔字符串」(Documentation Strings,或者簡稱docstrings),用於解釋
函數的做用、參數的類型與意義、返回值類型與取值範圍等。可使用內置函數help()打印出函數的使用幫助。好比:

>>> def randint(a, b):
... "Return random integer in range [a, b], including both end points."...
>>> help(randint)
Help on function randint in module __main__:
randint(a, b)
Return random integer inrange[a, b], including both end points.

對象的方法
對象的方法是指綁定到對象的函數。調用對象方法的語法是instance.method(arguments)。它等價於調用Class.method(instance, arguments)。當定義對象方法時,必須顯式地定義第一個參
數,通常該參數名都使用self,用於訪問對象的內部數據。這裏的self至關於C++, Java裏面的this變量,可是咱們還可使用任何其它合法的參數名,好比this 和 mine 等,self與C+
+,Java裏面的this不徹底同樣,它能夠被看做是一個習慣性的用法,咱們傳入任何其它的合法名稱都行,好比:

class Fish:
    def eat(self, food):
        if food is not None:
            self.hungry=False
class User: 
    def__init__(myself, name):
        myself. name= name
#構造Fish的實例:
f=Fish()
#如下兩種調用形式是等價的:
Fish.eat(f,"earthworm")
f.eat("earthworm") 
u = User('username')
print(u .name)

Python認識一些以「__」開始並以「__」結束的特殊方法名,它們用於實現運算符重載和實現多種特殊功能。

類型
Python採用動態類型系統。在編譯的時候,Python不會檢查對象是否擁有被調用的方法或者屬性,而是直至運行時,才作出檢查。因此操做對象時可能會拋出異常。不過,雖然Python採用動
態類型系統,它同時也是強類型的。Python禁止沒有明肯定義的操做,好比數字加字符串。

與其它面嚮對象語言同樣,Python容許程序員定義類型。構造一個對象只須要像函數同樣調用類型便可,好比,對於前面定義的Fish類型,使用Fish()。類型自己也是特殊類型type的對象
(type類型自己也是type對象),這種特殊的設計容許對類型進行反射編程。

Python內置豐富的數據類型。與Java、C++相比,這些數據類型有效地減小代碼的長度。下面這個列表簡要地描述了Python內置數據類型(適用於Python 3.x):

除了各類數據類型,Python語言還用類型來表示函數、模塊、類型自己、對象的方法、編譯後的Python代碼、運行時信息等等。所以,Python具有很強的動態性。

數學運算
Python使用與C、Java相似的運算符,支持整數與浮點數的數學運算。同時還支持複數運算與無窮位數(實際受限於計算機的能力)的整數運算。除了求絕對值函數abs()外,大多數數學函數
處於math和cmath模塊內。前者用於實數運算,然後者用於複數運算。使用時須要先導入它們,好比:

>>> import math
>>> print(math.sin(math.pi/2))
1.0

fractions模塊用於支持分數運算;decimal模塊用於支持高精度的浮點數運算。

Python定義求餘運行a % b的值處於開區間[0, b)內,若是b是負數,開區間變爲(b, 0]。這是一個很常見的定義方式。不過其實它依賴於整除的定義。爲了讓方程式:b * (a // b) + a % b
= a恆真,整除運行須要向負無窮小方向取值。好比7 // 3的結果是2,而(-7) // 3的結果倒是-3。這個算法與其它不少編程語言不同,須要注意,它們的整除運算會向0的方向取值。Python容許像數學的經常使用寫法那樣連着寫兩個比較運行符。好比a < b < c與a < b and b < c等價。C++的結果與Python不同,首先它會先計算a < b,根據二者的大小得到0或者1兩個值之一,而後再與c進行比較。

 

若是,您認爲閱讀這篇博客讓您有些收穫,不妨點擊一下右下角的【推薦】。
若是,您但願更容易地發現個人新博客,不妨點擊一下左下角的【關注我】。
若是,您對個人博客所講述的內容有興趣,請繼續關注個人後續博客,我是【Ruthless】。

本文版權歸做者和博客園共有,歡迎轉載,但未經做者贊成必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,不然保留追究法律責任的權利。

相關文章
相關標籤/搜索