一 前言
Python語法簡潔清晰,特色之一是強制用空白符(white space)作為語句縮進煞额。Python具有豐富和強大的庫。在日漸繁榮的機器學習、人工智能領域更是獨當一面,下面來學習Python這門編程語言朴爬。
二 基礎語法
2.1 數(shù)據(jù)類型
Python中最常見的數(shù)據(jù)類型:
數(shù)據(jù)類型 | 例子 | 備注 |
---|---|---|
整型 | -1即寒,0,1召噩,2母赵,100, | Python可以處理任意大小的整數(shù)具滴,整數(shù)十六進制用0x前綴和0-9凹嘲,a-f表示 |
浮點型 | -1.0,0.0构韵,1.0周蹭,2.1,100.11疲恢, | 浮點數(shù)也就是小數(shù),浮點數(shù)可以用數(shù)學寫法凶朗,也可用科學計數(shù)法表示 |
字符串 | 'hello',"hello python!" 显拳,'I'm "OK"!' | 字符串用單引號('')或雙引號("")表示棚愤,如果字符串內(nèi)部既包含'又包含",可以用轉義字符\來標識 |
布爾值 | True,Flase | 一個布爾值只有True杂数、False兩種值宛畦,要么是True,要么是False揍移,在Python中次和,可以直接用True、False表示布爾值(請注意大小寫) |
空值 | None | 空值是Python里一個特殊的值那伐,用None表示斯够。None不能理解為0囚玫,因為0是有意義的,而None是一個特殊的空值读规。 |
此外抓督,Python還提供了列表、字典等多種數(shù)據(jù)類型束亏,還允許創(chuàng)建自定義數(shù)據(jù)類型铃在,我們后面會繼續(xù)講到。
2.2 變量
Python中定義變量非常簡單碍遍,只需要起好名字定铜,用等號賦值。比如要定義一個變量叫age其值是30,則代碼就是:
age = 30
變量命名規(guī)則與java等語言類似怕敬,需要遵守以下3條規(guī)則:
1.只能是一個詞揣炕。
2.只能包含字母、數(shù)字和下劃線东跪。
3.不能以數(shù)字開頭畸陡。
比如是無效的變量名:
page-num(不能有-符號)、page num(不能有空格),虽填、page$num(不能有$等特殊符號)丁恭、8page(不能以數(shù)字開頭)等
變量名是區(qū)分大小寫的。這意味著斋日,age牲览、 AGE、Age 不同的變量恶守。變量用小寫字母開頭是Python的編碼規(guī)范第献。
2.3 注釋
python用符號#表示注釋,例
age = 30 #注釋例子兔港,注釋可以提高代碼的可讀性痊硕,這在團隊協(xié)作中尤為重要
2.4 print()函數(shù)
print()函數(shù)將括號內(nèi)的字符串顯示在屏幕上,在交互式環(huán)境中輸入:
print('Hello Python!')
就可以用print()函數(shù)將"Hello Python!"輸出到屏幕上押框。
2.5 input()函數(shù)
函數(shù)等待用戶在鍵盤上輸入一些文本岔绸,并按下回車鍵,在交互式環(huán)境中輸入:
age = input()
這個函數(shù)求值為一個字符串橡伞,即用戶輸入的文本盒揉。如果用戶輸入'30',那么該表達式就求值為age = '30'兑徘。
2.6 算術運算
Python支持基本的四則運算符:加+刚盈,減-,乘*挂脑,除/藕漱,運算符的優(yōu)先級順序也與日常計算相同:括號優(yōu)先欲侮、乘除優(yōu)于加減。
2.7類型轉換
除了在定義變量時指定數(shù)據(jù)類型以外肋联,Python也提供靈活改變數(shù)據(jù)類型的函數(shù)威蕉。
- str()將數(shù)值變量轉換為字符,字符類型可以直接與其他文本連接或進行字符操作橄仍,但是就不能再參與算數(shù)計算了韧涨。
- float()可以將字符變量轉換為浮點數(shù)(前提是字符內(nèi)容必須確實是數(shù)字),
- int()函數(shù)可以將字符或浮點數(shù)轉換為整數(shù)侮繁,對于浮點數(shù),int()相當于向下取整虑粥。
2.8列表
Python內(nèi)置的一種數(shù)據(jù)類型是列表:list。list是一種有序的集合宪哩,可以隨時添加和刪除其中的元素娩贷。
nameList = ['Jason', 'Jack', 'Paul']
nameList就是一個列表,列表的一些常用操作:
len(nameList) #用len()函數(shù)可以獲得list元素的個數(shù)
nameList[0] #用索引來訪問list中每一個位置的元素锁孟,索引是從0開始的
nameList[-1] #負數(shù)表示倒序取數(shù)彬祖,-1表示取最后一個元素
nameList.append('James') #可以往list中追加元素到末尾
nameList.pop() #刪除list末尾的元素,用pop()方法
nameList.pop(i) #刪除指定位置的元素罗岖,用pop(i)方法,其中i是索引位置
2.9元組
元組和列表非常類似腹躁,但是元組一旦初始化就不能修改桑包,比如同樣的nameList
nameList = ('Jason', 'Jack', 'Paul')
元組沒有append(),insert()這樣的方法纺非。其他獲取元素的方法和list是一樣的哑了,可以正常地使用nameList[0],nameList[-1]烧颖,但不能賦值成另外的元素
2.10字典
字典在其他語言中也稱為map弱左,使用鍵-值(key-value)存儲,具有極快的查找速度炕淮。例:
d = {'Jason': 95, 'Jack': 75, 'Paul': 85}
三 控制流
根據(jù)表達式求值的結果拆火,程序可以決定跳過指令,重復指令涂圆,或從幾條指令中選擇一條運行们镜。“控制流語句”可以決定在什么條件下執(zhí)行哪些Python語句润歉。要做到這一點模狭,讓我們先看看布爾值、比較操作符和布爾操作符踩衩。
3.1布爾值嚼鹉、比較操作符和布爾操作符
- 布爾值就是最基本的邏輯判斷:True or False
- “比較操作符”比較兩個值贩汉,求值為一個布爾值。表2-1列出了比較操作符锚赤。
操作符 | 含義 |
---|---|
== | 等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
這些操作符根據(jù)給它們提供的值匹舞,求值為True或False,注意==與賦值運算符=的區(qū)別宴树,兩者有根本差異策菜。
- 布爾操作符:
布爾操作符(and、or和not)用于比較布爾值酒贬。像比較操作符一樣又憨,它們將這些表達式求值為一個布爾值。
and操作符:and操作符總是接受兩個布爾值,如果兩個布爾值都為True锭吨,and操作符就將表達式求值為True蠢莺,否則求值為False。
or操作符:or操作符總是接受兩個布爾值,只要有一個布爾值為真零如,or操作符就將表達式求值為True躏将。如果都是False,所求值為False考蕾。
not操作符:not操作符只作用于一個布爾值(或表達式)祸憋。not操作符求值為相反的布爾值.
有了基于布爾值的條件邏輯運算,就可以進行條件判斷肖卧,由此決定程序的分支去向蚯窥。
3.2If判斷
(1)if語句
表示:如果條件為真,執(zhí)行子句中的代碼塞帐±乖基本結構:
- if關鍵字;
- 條件(即求值為True或False的表達式)葵姥;
- 冒號荷鼠;
- 在下一行開始,縮進的代碼塊(稱為if子句)榔幸。
例:
if name == 'Jason':
print('Hi, Jason.')
(2)else語句
只有if語句的條件為False時允乐,else子句才會執(zhí)行∠髋兀基本結構:
- else關鍵字喳篇;
- 冒號;
- 在下一行開始态辛,縮進的代碼塊(稱為else子句)麸澜。
例:
if name == 'Jason':
print('Hi, Jason.')
else:
print('Hello, stranger.')
(3)elif語句
elif語句是“否則如果”,總是跟在if或另一條elif語句后面奏黑,基本結構:
- elif關鍵字炊邦;
- 條件(即求值為True或False的表達式)编矾;
- 冒號;
- 在下一行開始馁害,縮進的代碼塊(稱為elif子句)窄俏。
例:
if name == 'Jason':
print('Hi, Jason.')
elif name == 'cyj':
print('Hello, cyj.')
3.3 while循環(huán)語句
利用while語句,只要while語句的條件為True碘菜,while子句中的代碼就會執(zhí)行凹蜈。
基本結構:
- 關鍵字;
- 條件(求值為True或False的表達式)忍啸;
- 冒號仰坦;
- 從新行開始,縮進的代碼塊(稱為while子句)计雌。
例:
count = 0
while count < 8:
print('Hello, world.')
count = count + 1
3.4 for循環(huán)和range()函數(shù)
while循環(huán)在條件為True時悄晃,就會繼續(xù)循環(huán)。但如果你想讓一個代碼塊執(zhí)行固定次數(shù)凿滤,可以通過for循環(huán)語句和range()函數(shù)來實現(xiàn)妈橄。
range()有三個參數(shù),分別表示開始翁脆、停止和步長參數(shù)眷蚓。
for語句與 range()函數(shù)配合使用的基本結構如下:
- for關鍵字;
- 一個變量名反番;
- in關鍵字沙热;
- 調用range()方法,最多傳入3個參數(shù)恬口;
- 冒號校读;
- 從下一行開始沼侣,縮退的代碼塊(稱為for子句)祖能。
例:
for i in range(5):
print('i = ' + str(i) )
3.5 break語句和continue語句
break語句:執(zhí)行遇到break語句,就會馬上退出當前循環(huán)子句蛾洛,即退出當前循環(huán)养铸。
continue語句:程序執(zhí)行遇到continue語句,就會馬上跳回到循環(huán)開始處轧膘,重新對循環(huán)條件求值钞螟,即退出當前循環(huán)子句。
四 函數(shù)
上一節(jié)已經(jīng)使用了print()谎碍、input()函數(shù)鳞滨,其實Python還內(nèi)置了很多有用的函數(shù),我們可以直接調用蟆淀。
4.1 定義函數(shù)
在Python中拯啦,定義一個函數(shù)要使用def語句澡匪,依次寫出函數(shù)名、括號褒链、括號中的參數(shù)和冒號:唁情,然后,在縮進塊中編寫函數(shù)體甫匹,函數(shù)的返回值用return語句返回甸鸟。
def sayHello(name):
print('Hello ' + name)
return 'Hello ' + name
函數(shù)體內(nèi)部的語句在執(zhí)行時,一旦執(zhí)行到return時兵迅,函數(shù)就執(zhí)行完畢抢韭,并將結果返回。
如果沒有return語句喷兼,函數(shù)執(zhí)行完畢后也會返回結果篮绰,只是結果為None。return None可以簡寫為return季惯。
4.2 函數(shù)的參數(shù)
Python的函數(shù)定義非常簡單吠各,但靈活度卻非常大。除了正常定義的必選位置參數(shù)外勉抓,還可以使用默認參數(shù)贾漏、可變參數(shù)和關鍵字參數(shù),使得函數(shù)定義出來的接口藕筋,不但能處理復雜的參數(shù)纵散,還可以簡化調用者的代碼。
- 位置參數(shù)
def sayHello(name):
print('Hello ' + name)
return 'Hello ' + name
對于sayHello(name)函數(shù)隐圾,參數(shù)name就是一個位置參數(shù)
- 默認參數(shù)
def sayHello(name='Jason'):
print('Hello ' + name)
return 'Hello ' + name
然后直接調用sayHello()時伍掀,就會打印'Hello Jason'。
- 可變參數(shù)
顧名思義暇藏,可變參數(shù)就是傳入的參數(shù)個數(shù)是可變的蜜笤,可以是1個、2個到任意個盐碱,還可以是0個
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
定義可變參數(shù)在參數(shù)前面加了一個*號把兔。在函數(shù)內(nèi)部,參數(shù)numbers接收到的是一個元組瓮顽,因此县好,函數(shù)代碼完全不變。但是暖混,調用該函數(shù)時缕贡,可以傳入任意個參數(shù),包括0個參數(shù):
calc(1, 2)
或
calc()
- 關鍵字參數(shù)
可變參數(shù)允許你傳入0個或任意個參數(shù),這些可變參數(shù)在函數(shù)調用時自動組裝為一個元組晾咪。而關鍵字參數(shù)允許你傳入0個或任意個含參數(shù)名的參數(shù)黔漂,這些關鍵字參數(shù)在函數(shù)內(nèi)部自動組裝為一個 字典。
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
函數(shù)person除了必選參數(shù)name和age外禀酱,還接受關鍵字參數(shù)kw炬守,關鍵字參數(shù)在參數(shù)前面加了兩個*號。在調用該函數(shù)時剂跟,可以只傳入必選參數(shù)减途,也可以傳入任意個數(shù)的關鍵字參數(shù):
person('Michael', 30) #只傳入必選參數(shù)
person('Bob', 35, city='Beijing') #可以傳入任意個數(shù)的關鍵字參數(shù)
person('Adam', 45, gender='M', job='Engineer') #可以傳入任意個數(shù)的關鍵字參數(shù)