初窺Python門縫了解入門路徑
此之謂入門,其標(biāo)準(zhǔn)是,在不計(jì)效率的情況下,可以使用這門語言實(shí)現(xiàn)一個(gè)不太復(fù)雜的功能。
當(dāng)然,這個(gè)不計(jì)效率也不是毫無原則的不計(jì),比如我可以1小時(shí)搞定,那么剛?cè)腴T的新手需要1天甚至2天,他將需要大量的時(shí)間去查庫查類查函數(shù),但絕不至于用上一周半周的。
我從來都沒學(xué)過python,當(dāng)年只是受夠了Matlab,而想把一個(gè)用Matlab寫的類轉(zhuǎn)成其他語言,結(jié)果用了一周,就把一個(gè)涵蓋圖像處理、數(shù)據(jù)擬合等功能的一千來行Matlab代碼順利轉(zhuǎn)成了Python。過了沒幾年,Matlab就對(duì)我們禁用了,可見當(dāng)年的選擇是極為英明的。
那么如今讓我重寫一遍那個(gè)類,大概只需要一天不到。這就是新手和老手的區(qū)別,但也僅僅是新手和老手的區(qū)別。
從入門到熟練運(yùn)用,需要的不是什么思維的提升,而僅僅是是一個(gè)字——用,或者更直觀地說,就是看代碼量。從這個(gè)意義上來說,越快入門,就可以更早地堆積代碼量,從而更早地熟練運(yùn)用Python,而不是按部就班地從入門到放棄。學(xué)習(xí)編程最可怕的事情就是:每天寫一遍Hello World并感覺收獲滿滿。
接下來,快速入門Python。
1 環(huán)境配置與基本運(yùn)算
正所謂天下武功、唯快不破。學(xué)Python,講求的就是一個(gè)快字。
盡管下載Python并安裝并不麻煩,但新手往往會(huì)在使用過程中出現(xiàn)各種讓人費(fèi)解的問題。所以,如果想1小時(shí)入門,我推薦這個(gè)。
在線Jupyter編輯工具,進(jìn)入之后,點(diǎn)擊中間的Try JupyterLab
,就可以進(jìn)入在線Notebook的界面。
點(diǎn)擊Python3,快速進(jìn)入jupyter notebook的環(huán)境。然后按照直覺,寫一些四則運(yùn)算表達(dá)式,例如這些:
x = 100 y = 50 z = 2.5 print(x + y * z) print(x - y / z) print(x * y**2)
然后同時(shí)按下Ctrl
+回車
,就能運(yùn)行python代碼。
然后按下alt
+回車
,開啟下一段代碼。
如果用shift
+回車
,則會(huì)綜合上面的兩個(gè)功能,本節(jié)耗時(shí):3分鐘。
如果覺得在線Jupyter工具不好用,還有這個(gè)ideone,進(jìn)入之后選擇python
,輸完代碼后選擇run
。
2 調(diào)用各種包
在python中,通過import
來完成包的調(diào)用。例如,我想調(diào)用一個(gè)日歷的包,然后打印日歷
import calendar calendar.prcal(2021,m=4) #2021年,每行4個(gè)月
然后shift
+回車
,就可以看到日歷了。
如果想通過python進(jìn)行科學(xué)計(jì)算,應(yīng)用最多的包是numpy
和matplotlib
中的pyplot
,前者用于計(jì)算,后者用于繪圖。通常二者被重命名為np
和plt
。接下來演示一下二者的用法。
import numpy as np from matplotlib import pyplot as plt x = np.random.rand(100) #python中通過#進(jìn)行注釋 y = np.random.rand(100) #用于生成100個(gè)隨機(jī)數(shù) plt.scatter(x,y) #繪制散點(diǎn)圖,并存放在內(nèi)存 plt.show() #調(diào)用內(nèi)存中的圖,show給我們
本節(jié)需要記住的單詞
:import
、as
、numpy
、matplotlib.pyplot
、random.rand
、scatter
、plt.show
。
本節(jié)耗時(shí):5分鐘。
3 判斷、循環(huán)
如果想統(tǒng)計(jì)剛剛新建的x
和y
中,有多少大于0.5,那么方法很簡(jiǎn)單,:新建兩個(gè)變量用于存儲(chǔ)二者的個(gè)數(shù),然后跑一個(gè)循環(huán)進(jìn)行判斷。
xNum = 0 yNum = 0 for i in range(100): if x[i]>0.5:xNum += 1 # xNum += 1 即 xNum = xNum + 1 if y[i]>0.5:yNum += 1 # python中通過方括號(hào)進(jìn)行索引 print(xNum,yNum)
可以把range(100)
理解為0到99這100個(gè)數(shù)組成的一個(gè)集合,for i in range(100)
意味著i
對(duì)這個(gè)集合進(jìn)行遍歷,遍歷就是逐個(gè)復(fù)制給i,所以就完成了循環(huán)。
在python中,判斷、循環(huán)結(jié)構(gòu)通過:
與其內(nèi)容進(jìn)行分隔,且子代碼塊需要通過空格進(jìn)行標(biāo)記。如果程序塊中只有一行代碼,則可以直接寫在:
后面。
如果想知道,x
中處于 ( 0 , 0.3 ] , ( 0.3 , 0.6 ] , ( 0.6 , 1 ] (0,0.3],(0.3,0.6],(0.6,1] (0,0.3],(0.3,0.6],(0.6,1]這三個(gè)區(qū)間的數(shù)分別是多少,則需要用到if..elif
n1,n2,n3 = 0,0,0 #按照直覺理解即可 for i in x: if i>0.6 : n3 += 1 elif i>0.3 : n2 += 1 else: n1 += 1 print(n1,n2,n3)
for..in
的作用是遍歷某個(gè)集合,而x
本身也是一個(gè)集合,所以也可以接受遍歷。
本節(jié)需要記住的單詞
:if, else, elif, for, +=,
,耗時(shí)5分鐘。
4 函數(shù)
如果想反復(fù)統(tǒng)計(jì)一組隨機(jī)數(shù)的分布情況,顯然不能每次都寫一遍那么老長的代碼,而是應(yīng)該把代碼封裝到一個(gè)函數(shù)里面。
def statis(x): xNum = 0 for i in x: if i>0.5: xNum += 1 return xNum
在Python中,通過def
新建一個(gè)函數(shù),函數(shù)名字后的括號(hào)里是這個(gè)函數(shù)需要輸入的變量。最后通過return
來返回一個(gè)值。如果按照數(shù)學(xué)的那種表達(dá)式,以上代碼差不多類似xNum=statis(x)這樣的感覺。
在建了一個(gè)函數(shù)之后,就可以調(diào)用了,本節(jié)用時(shí)5分鐘,需要記住def
和return
。
5 數(shù)據(jù)結(jié)構(gòu)
我們剛剛說x
是集合,這是不準(zhǔn)確的。數(shù)學(xué)上的集合要求不能有重復(fù)元素,但x是隨機(jī)生成的一個(gè)數(shù)組,所以并不能保證這一點(diǎn)。
在本節(jié),我們要弄懂python中最常用的5種數(shù)據(jù)結(jié)構(gòu):元組、列表、字典、集合、數(shù)組,同時(shí)要掌握python推導(dǎo)式,預(yù)計(jì)耗時(shí)15分鐘。
tpl = (1,2,3,4) #此為元組tuple lst = [1,2,3,4,5] #此為列表list dct = {"a":1, "b":2, "c":3} #此為字典dict st = {1,2,3,3} #此為集合 arr = np.array([1,2,3,4]) #此為數(shù)組
可以看到,盡管我們?cè)谛陆系臅r(shí)候給了1,2,3,3
,但集合中沒有重復(fù)元素,所以只剩下一個(gè)3。
一句話區(qū)分這五種類型:
- 只有數(shù)組
np.array
可以計(jì)算 - 字典通過
鍵值對(duì)
(key-value)進(jìn)行索引 - 集合無重復(fù)元素,且不可索引
- 元組可以作為字典的鍵,列表則不能。
這五種數(shù)據(jù)類型的詳細(xì)區(qū)別如下(這個(gè)其實(shí)用不著記)。
索引方式 | 可計(jì)算 | 可哈希 | 元素可重復(fù) | 指針式 | |
---|---|---|---|---|---|
tuple | tpl[0] |
❌ | ✅ | ✅ | * |
list | lst[0] |
❌ | ❌ | ✅ | * |
dict | dct["a"] |
❌ | ❌ | ❌ | ** |
set | ❌ | ❌ | ❌ | ❌ | * |
np.array | arr[0] |
✅ | ❌ | ✅ | ❌ |
其中,可哈希暫時(shí)可理解為能夠作為字典的key。
所謂指針式
是我亂取的一個(gè)名字,意思是可以像指針一樣把元素取出來。其中,集合與字典因?yàn)樵夭豢芍貜?fù),所以并沒有什么變化。
至于可計(jì)算就比較容易理解了,例如+
測(cè)試,字典和集合干脆就報(bào)錯(cuò)了,而元組、列表將+
重載為合并,只有arr
執(zhí)行了加法操作。
在python中,可通過len
來獲取這些數(shù)據(jù)結(jié)構(gòu)的長度。
6 字符串
在字典中我們其實(shí)已經(jīng)用過了字符串,在python中,用單引號(hào)或雙引號(hào)來代表字符串,二者是等價(jià)的。
x = 'abc' y = "abc" print(x==y)
因?yàn)橐?hào)被用于字符串的標(biāo)志,所以如果想在字符串中輸入引號(hào),則需要轉(zhuǎn)義,轉(zhuǎn)移符號(hào)為\
。又因?yàn)?code>\用于轉(zhuǎn)義,所以\
也需要轉(zhuǎn)義。
print('\'') print('\\') print("\"")
7 回到本地
如果下載之后,可通過win
+r
,輸入cmd
進(jìn)入命令行,輸入python
進(jìn)入python環(huán)境。
如果下載的是python,則通過pip isntall numpy
安裝numpy
,總之其命令格式為pip install XXX
;如果下載的是anacoda,則還可以通過conda install numpy
來進(jìn)行安裝——當(dāng)然,anaconda的基本環(huán)境已經(jīng)安裝了大部分常用包。
如果把python的代碼封裝到一個(gè).py
格式的文件中,然后就可以通過python XX.py
進(jìn)行調(diào)用,并執(zhí)行。
8 命令行版2048小游戲
按理說看到這里,并寫到這里,就應(yīng)該算是完成了入門,那么接下來就要用入門學(xué)會(huì)的知識(shí),寫一個(gè)命令行版的2048小游戲。
2048的邏輯無非是操作4x4
的方格,每個(gè)方格中有一個(gè)數(shù),我們可以操作這些數(shù)字進(jìn)行移動(dòng),如果兩個(gè)相同的數(shù)字在我們的操作下相撞了,那么它們就可以合并了。
而這個(gè)4x4
的方格,無非是一個(gè)矩陣。
我們的操作可以理解為輸入字符,用wsad
代表上下左右,y
代表確定,n
代表取消。
python接收字符的函數(shù)是input
,例如
>>> x = input("input a number") input a number5 >>> x '5'
而創(chuàng)建矩陣,可以用np.zeros([4,4]).astype(int)
,表示創(chuàng)建一個(gè) 4 × 4 4\times4 4×4的全0矩陣,并化為整形。
矩陣中只有16個(gè)元素,盡管循環(huán)效率低下,但足以滿足人的操作速度了。
如果讀者從頭到尾敲了所有的代碼,那么如今必然有能力獨(dú)立寫出這樣的程序。所以具體的代碼將在下篇文章給出。
到此這篇關(guān)于初窺Python門縫了解入門路徑的文章就介紹到這了,更多相關(guān)Python 入門內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows下實(shí)現(xiàn)pytorch環(huán)境搭建
這篇文章主要介紹了Windows下實(shí)現(xiàn)pytorch環(huán)境搭建,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Python并發(fā)編程多進(jìn)程,多線程及GIL全局解釋器鎖
這篇文章主要介紹了Python并發(fā)編程多進(jìn)程,多線程及GIL全局解釋器鎖,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-07-07Python實(shí)現(xiàn)字符型圖片驗(yàn)證碼識(shí)別完整過程詳解
這篇文章主要介紹了Python實(shí)現(xiàn)字符型圖片驗(yàn)證碼識(shí)別完整過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05使用Python實(shí)現(xiàn)保存剪貼板中的圖像
這篇文章主要為大家詳細(xì)介紹了如何使用Python創(chuàng)建一個(gè)簡(jiǎn)單的GUI應(yīng)用程序,實(shí)現(xiàn)保存剪貼板中的圖像功能,文中的示例代碼講解詳細(xì),需要的可以參考下2023-09-09