本文針對(duì)零基礎(chǔ)讀者,不需要具備任何編程基礎(chǔ),通過(guò)本文可以對(duì)Python有一個(gè)比較整體的了解,便于以后的深入學(xué)習(xí)打下良好基礎(chǔ)
本文試圖概述Python編程語(yǔ)言的所有關(guān)鍵點(diǎn),并專注于絕對(duì)需要理解的最重要的主題。完全零基礎(chǔ),你不需要具備任何先前的編程知識(shí),并且可以非常快速地掌握所有必需的概念。
好,接下來(lái)我們開始。
1. Python簡(jiǎn)介
Python是一種解釋型語(yǔ)言: 這意味著開發(fā)過(guò)程中沒(méi)有了編譯這個(gè)環(huán)節(jié)。類似于PHP和Perl語(yǔ)言
Python是交互式語(yǔ)言:你可以在一個(gè)Python提示符 >>> 后直接執(zhí)行代碼
Python是面向?qū)ο笳Z(yǔ)言: 這意味著Python支持面向?qū)ο蟮娘L(fēng)格或代碼封裝在對(duì)象的編程技術(shù)
Python是初學(xué)者的語(yǔ)言:Python對(duì)初級(jí)程序員而言,是一種偉大的語(yǔ)言,它支持廣泛的應(yīng)用程序開發(fā),從簡(jiǎn)單的文字處理到WWW瀏覽器再到游戲
2. 變量、數(shù)據(jù)類型及作用域
變量來(lái)源于數(shù)學(xué),是計(jì)算機(jī)語(yǔ)言中能儲(chǔ)存計(jì)算結(jié)果或能表示值抽象概念。變量可以通過(guò)變量名訪問(wèn)。在指令式語(yǔ)言中,變量通常是可變的。而在Python中,變量等同于names。
聲明變量和賦值(Python中也稱作binding,相比賦值,綁定這個(gè)詞可能更形象)操作:
myFirstVariable=1mySecondVariable=2myFirstVariable = "Hello You"
Python支持?jǐn)?shù)據(jù)類型包括數(shù)字、字符串、集合、列表、元組、字典。數(shù)字支持整數(shù)、小數(shù)、浮點(diǎn)。長(zhǎng)整型會(huì)有一個(gè)L的后綴,比如9999999999999L。字符串是被引號(hào)(單雙均可)包圍由數(shù)字、字母、下劃線組成的一串字符。
程序創(chuàng)建、訪問(wèn)、改變一個(gè)變量時(shí),都是在一個(gè)保存該變量的空間內(nèi)進(jìn)行,這個(gè)空間為命名空間,即作用域。Python作用域是靜態(tài)的,變量被賦值、創(chuàng)建的位置決定了其被訪問(wèn)的范圍,即變量作用域由其所在位置決定。Python的作用域一共有4種,分別是:
L (Local) 局部作用域
E (Enclosing) 閉包函數(shù)外的函數(shù)中
G (Global) 全局作用域
B (Built-in) 內(nèi)建作用域
以L –> E –> G –>B 的規(guī)則查找,即:在局部找不到,便會(huì)去局部外的局部找(例如閉包),再找不到就會(huì)去全局找,再者去內(nèi)建中找。
3. 運(yùn)算符
Python語(yǔ)言支持以下類型的運(yùn)算符:
算術(shù)運(yùn)算符:+;-;*;/;%(取模 - 返回除法的余數(shù));**(冪 - 返回x的y次冪);//(取整除 - 返回商的整數(shù)部分,向下取整)
比較(關(guān)系)運(yùn)算符:==(等于 - 比較對(duì)象是否相等);!=(不等于 - 比較兩個(gè)對(duì)象是否不相等);<>(不等于 - 比較兩個(gè)對(duì)象是否不相等);>(大于 - 返回x是否大于y);<(小于 - 返回x是否小于y);>=(大于等于- 返回x是否大于等于y);<=(小于等于 -返回x是否小于等于y)
賦值運(yùn)算符:=(簡(jiǎn)單的賦值運(yùn)算符);+=(加法賦值運(yùn)算符);-=(減法賦值運(yùn)算符);*=(乘法賦值運(yùn)算符);/=(除法賦值運(yùn)算符);%=(取模賦值運(yùn)算符);**=(冪賦值運(yùn)算符);//=(取整除賦值運(yùn)算符)
位運(yùn)算符:&(按位與運(yùn)算符);|(按位或運(yùn)算符);^(按位異或運(yùn)算符);~(按位取反運(yùn)算符);<<(左移動(dòng)運(yùn)算符);>>(右移動(dòng)運(yùn)算符)
邏輯運(yùn)算符:and(布爾"與");or(布爾"或");not(布爾"非")
成員運(yùn)算符:in(如果在指定的序列中找到值返回 True,否則返回 False);not in(如果在指定的序列中沒(méi)有找到值返回 True,否則返回 False)
身份運(yùn)算符:is(判斷兩個(gè)標(biāo)識(shí)符是不是引用自一個(gè)對(duì)象);is not(判斷兩個(gè)標(biāo)識(shí)符是不是引用自不同對(duì)象)
4. 注釋
單行注釋:
#this is a single line comment
多行注釋:
```thisisamultilinecomment```5. Pickling
將對(duì)象轉(zhuǎn)換為字符串并將字符串轉(zhuǎn)儲(chǔ)到文件中稱為酸洗。 反過(guò)來(lái)被稱為unpickling。
6. 函數(shù)
函數(shù)是組織好的,可重復(fù)使用的,用來(lái)實(shí)現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段。函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率。
定義新函數(shù):
defmy_new_function(): print('this is my new function')
函數(shù)調(diào)用
my_new_function()
查看字符串長(zhǎng)度
len('hello')prints 57. 參數(shù)
定義函數(shù)的時(shí)候,把參數(shù)的名字和位置確定下來(lái),函數(shù)的接口定義就完成了。函數(shù)的調(diào)用者只需知道如何傳遞正確的參數(shù),以及函數(shù)將返回什么樣的值即可。
Python參數(shù)包括:位置參數(shù);默認(rèn)參數(shù);可變參數(shù);命名關(guān)鍵字參數(shù);參數(shù)組合。
8. 模塊
Python 模塊(Module),是一個(gè) Python 文件,以 .py 結(jié)尾,包含了 Python 對(duì)象定義和Python語(yǔ)句。模塊讓你能夠有邏輯地組織你的 Python 代碼段。把相關(guān)的代碼分配到一個(gè)模塊里能讓你的代碼更好用,更易懂。模塊能定義函數(shù),類和變量,模塊里也能包含可執(zhí)行的代碼。
導(dǎo)入模塊:
import module1[, module2[,... moduleN]]
調(diào)用模塊中的函數(shù):
module1.function1
從某個(gè)模塊中導(dǎo)入一個(gè)指定的部分到當(dāng)前命名空間中:
from modname import name1[, name2[, ... nameN]]
把一個(gè)模塊的所有內(nèi)容全都導(dǎo)入到當(dāng)前的命名空間:
from modname import *9. 包
模塊與包是任何大型程序的核心,就連Python安裝程序本身也是一個(gè)包。包是一個(gè)有層次的文件目錄結(jié)構(gòu),它定義了由n個(gè)模塊或n個(gè)子包組成的python應(yīng)用程序執(zhí)行環(huán)境,包含__init__.py文件和其它模塊或子包。
從包里調(diào)用模塊:
from packageroot.packagefolder.mod import my_object
PIP是Python的包管理器,未來(lái)你將會(huì)頻繁的用到他:
pip install package_name10. 條件語(yǔ)句
Python條件語(yǔ)句是通過(guò)一條或多條語(yǔ)句的執(zhí)行結(jié)果(True或者False)來(lái)決定執(zhí)行的代碼塊,也就是連吃瓜群眾都知道的if/else語(yǔ)句:
ifa=b:print'aisb'elifab:print'aisgreaterthanb'else: print 'a is different'
條件語(yǔ)句是可以嵌套的:
else:ifa=2:print'withinifofelse'else: print 'within else of else'
11. 循環(huán)語(yǔ)句
循環(huán)語(yǔ)句允許我們執(zhí)行一個(gè)語(yǔ)句或語(yǔ)句組多次,一般包含兩種類型:While循環(huán)和For循環(huán)。
While循環(huán),一直循環(huán)知道滿足某個(gè)條件終止:
while(input0):?do_something(input) input = input-1
While循環(huán)嵌套:
whileexpression:whileexpression:statement(s) statement(s)
For循環(huán),一直循環(huán)知道次數(shù)用盡:
foriinrange(0,10)print i
For循環(huán)嵌套語(yǔ)法:
foriterating_varinsequence:foriterating_varinsequence:statements(s) statements(s)
循環(huán)控制語(yǔ)句可以更改語(yǔ)句執(zhí)行的順序。Python支持以下循環(huán)控制語(yǔ)句:
break:在語(yǔ)句塊執(zhí)行過(guò)程中終止循環(huán),并且跳出整個(gè)循環(huán)
continue:在語(yǔ)句塊執(zhí)行過(guò)程中終止當(dāng)前循環(huán),跳出該次循環(huán),執(zhí)行下一次循環(huán)
pass:pass是空語(yǔ)句,是為了保持程序結(jié)構(gòu)的完整性
break語(yǔ)法:
foriinrange(0,10):if(i==5): break
whileTrue:x=get_value()if(x==1): break12. 遞歸
在函數(shù)內(nèi)部,可以調(diào)用其他函數(shù)。如果一個(gè)函數(shù)在內(nèi)部調(diào)用自身本身,這個(gè)函數(shù)就是遞歸函數(shù)。
舉個(gè)例子,我們來(lái)計(jì)算階乘n! = 1 x 2 x 3 x ... x n,用函數(shù)factorial(n)表示,可以看出:
factorial(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = factorial(n-1) x n
所以,factorial(n)可以表示為n x fact(n-1),只有n=1時(shí)需要特殊處理。
于是,factorial(n)用遞歸的方式寫出來(lái)就是:
deffactorial(n):ifn==0:return1else: return n * factorial(n-1)13. 框架與棧調(diào)用
Python代碼載入框架,框架位于棧中。
函數(shù)與參數(shù)和變量一起載入框架
框架會(huì)按照正確的執(zhí)行順序依次載入棧中
棧中列出函數(shù)的執(zhí)行步驟,在函數(shù)外聲明的變量存儲(chǔ)在main中
最后入棧的框架將最先執(zhí)行
如果發(fā)生錯(cuò)誤,可以使用回溯來(lái)獲取函數(shù)表
14、列表和庫(kù)
列表
列表是可以保存任何數(shù)據(jù)類型的值序列的數(shù)據(jù)結(jié)構(gòu)。它們是可變的(可更新的)。
列表由整數(shù)索引。
字典
字典是編程世界中最重要的數(shù)據(jù)結(jié)構(gòu)之一。它的功能是存儲(chǔ)鍵/值對(duì)對(duì)象,可以優(yōu)化數(shù)據(jù)檢索功能。
15.編譯和鏈接
這些特征可用于使用以另一種語(yǔ)言編寫的文件,例如C或C ++等
將代碼寫入文件后,可以將文件放在Modules目錄中。
在Setup.local文件中添加一行非常重要,以確保可以加載新創(chuàng)建的文件。
16. 迭代器
迭代器可以遍歷集合,所有迭代器都包含__iter __()和__next __()函數(shù)
只需在列表,字典,字符串或集合上執(zhí)行iter(x)即可。
如果我們?cè)诩现杏写罅宽?xiàng)目,而且不打算一次加載內(nèi)存中的所有文件,那么迭代器就是很有用的。一些通用迭代器讓開發(fā)人員能夠?qū)崿F(xiàn)函數(shù)式編程語(yǔ)言實(shí)例。
17.面向?qū)ο蟮脑O(shè)計(jì):類
Python允許創(chuàng)建自定義類型。由用戶定義的類型稱為類。這些類可以具有自定義屬性和函數(shù)。
面向?qū)ο蟮脑O(shè)計(jì)允許程序員將其業(yè)務(wù)模型定義為具有所需屬性和功能的對(duì)象。
屬性也可以引用另一個(gè)對(duì)象。
Python類可以引用其他類。
Python支持封裝,即實(shí)例函數(shù)和變量。
Python支持繼承。
18.面向?qū)ο蟮脑O(shè)計(jì):繼承
Python支持對(duì)象的繼承。因此,對(duì)象可以繼承其父級(jí)對(duì)象的函數(shù)和屬性。
繼承的類可以在其函數(shù)中包含不同的邏輯。
如果一個(gè)類ParentClass有兩個(gè)子類:SubClass1,SubClass2
因此,兩個(gè)子類都將包含函數(shù)my_function()。
繼承可以鼓勵(lì)代碼重用和維護(hù)。
一些常見(jiàn)問(wèn)題指引
我為什么要使用Python?
簡(jiǎn)單的編碼和學(xué)習(xí)
面向?qū)ο缶幊陶Z(yǔ)言
偉大的分析和ML包
更快地開發(fā)并將我的解決方案推向市場(chǎng)
提供內(nèi)置內(nèi)存管理功能
提供巨大的社區(qū)支持和應(yīng)用程序
無(wú)需編譯,因?yàn)樗且环N解釋性語(yǔ)言
動(dòng)態(tài)輸入 - 無(wú)需聲明變量
如何讓Python快速運(yùn)行?
Python是一種高級(jí)語(yǔ)言,不適合訪問(wèn)系統(tǒng)級(jí)程序或硬件。
此外,Python不適用于跨平臺(tái)應(yīng)用程序。事實(shí)上,Python是一種動(dòng)態(tài)類型的解釋語(yǔ)言,與低級(jí)語(yǔ)言相比,它的優(yōu)化和運(yùn)行速度較慢。
實(shí)現(xiàn)基于C語(yǔ)言的擴(kuò)展。
使用Spark或Hadoop創(chuàng)建多進(jìn)程
利用Cython,Numba和PyPy來(lái)加速Python代碼,或用C語(yǔ)言編寫代碼,再像在NumPy中那樣在Python中公開
現(xiàn)在有哪些常用的IDE?
Spyder,PyCharm。另外,使用各種筆記本電腦, Jupyter
有哪些頂級(jí)Python框架和包?
Python有大量必備的包:
PyUnit(單元測(cè)試),PyDoc(文檔),SciPy(algebera和數(shù)字),Pandas(數(shù)據(jù)管理),Sci-Kit學(xué)習(xí)(ML和數(shù)據(jù)科學(xué)),Tensorflow(AI),Numpy(數(shù)組和數(shù)字),BeautifulSoap(web)頁(yè)面報(bào)廢),F(xiàn)lask(微框架),Pyramid(企業(yè)應(yīng)用程序),Django(UI MVVM),urllib(網(wǎng)頁(yè)抓取),Tkinter(GUI),mock(模擬庫(kù)),PyChecker(bug檢測(cè)器),Pylint(模塊代碼分析))
Python和R可以合并嗎?
R中編寫了大量豐富的統(tǒng)計(jì)庫(kù)
可以使用Rpy2 python包或在Juputer中使用beaker筆記本或IR內(nèi)核在Python中執(zhí)行R代碼。
有沒(méi)有辦法在運(yùn)行Python之前捕獲錯(cuò)誤?
在運(yùn)行代碼之前,我們可以使用PyChecker和PyLink來(lái)捕獲錯(cuò)誤。
-
編程語(yǔ)言
+關(guān)注
關(guān)注
10文章
1942瀏覽量
34707 -
python
+關(guān)注
關(guān)注
56文章
4792瀏覽量
84628
原文標(biāo)題:無(wú)需編程基礎(chǔ),Python從入門到進(jìn)階大法
文章出處:【微信號(hào):AI_era,微信公眾號(hào):新智元】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論