
Python學(xué)習(xí)心法
1、語(yǔ)法不是重點(diǎn)
2、算法不是重點(diǎn)
3、數(shù)據(jù)結(jié)構(gòu)及其轉(zhuǎn)化是大多數(shù)算法的核心,是應(yīng)該花大力氣學(xué)習(xí)的知識(shí)。
4 、Python知識(shí)的二八原則
?????20%的知識(shí)比較難 80%的知識(shí)淺顯易懂;
?????80%的知識(shí)在編程中用不到 ,常用的20%左右。
5、在ai時(shí)代,有許多代碼輔助工具可以在學(xué)習(xí)和工作中使用運(yùn)。比如codex(https://beta.openai.com? 基于GTP-3和GPT-C,2022年五月codex內(nèi)測(cè)結(jié)束,開(kāi)始收費(fèi)。), alphacode,? Copilot? tabnine 等等。知識(shí)的細(xì)節(jié)和語(yǔ)法熟練度等方面越來(lái)越不重要。所以學(xué)習(xí)的專(zhuān)注點(diǎn)不要放在語(yǔ)法和編程基本功上,也沒(méi)必要花太多時(shí)間刷很多算法題,應(yīng)該專(zhuān)注于問(wèn)題本身、專(zhuān)注于問(wèn)題所在領(lǐng)域的技術(shù)動(dòng)向。在入門(mén)過(guò)程中我們很難寫(xiě)出高質(zhì)量、有意義的代碼,當(dāng)你在語(yǔ)法和句法方面遇到的困難時(shí),試著跳過(guò)那些微不足道的問(wèn)題,試著用注釋先備注這里遇到的問(wèn)題,先讓程序的骨架搭建起來(lái),再回頭處理細(xì)節(jié)問(wèn)題。
???????關(guān)于幾個(gè)代碼輔助工具的文章https://posts.careerengine.us/p/60dc0202fe56051682946b57
6、專(zhuān)注于數(shù)據(jù)流
7、當(dāng)你對(duì)代碼的表達(dá)沒(méi)有足夠經(jīng)驗(yàn)時(shí),讀10個(gè)別人寫(xiě)的優(yōu)秀的程序、不如一次將自己的簡(jiǎn)單 ? ? 想法用代碼實(shí)現(xiàn)。試著將自己的編程思想表達(dá)出來(lái),每一次完整的編程實(shí)踐都意味著能力的拔高。
8、如果你關(guān)心的領(lǐng)域沒(méi)有充足的庫(kù)和算法有兩個(gè)可能 ,你檢索的范圍和檢索的方法有問(wèn)題,? 這部分知識(shí)被隱藏了起來(lái)。試著投入精力解決你要解決的問(wèn)題,這是我們學(xué)習(xí)編程的最終目的
9、學(xué)編程語(yǔ)言和學(xué)自然語(yǔ)言有很大部分是原理相通的,詞匯量、 表達(dá)習(xí)慣 ,表達(dá)能力,思考能力、閱讀能力,創(chuàng)新能力都可能幫助我們突破阻礙,也都有可能成為障礙。
?10、 當(dāng)我們學(xué)習(xí)編程時(shí),我們是在學(xué)習(xí)一種思考方法,思考工具,我們?cè)谔岣咚枷氲木S度。
編程作為一種語(yǔ)言或許也是有維度的,不同維度的編程用來(lái)解決不同維度的問(wèn)題,從我們運(yùn)用計(jì)算器處理簡(jiǎn)單的數(shù)學(xué)計(jì)算開(kāi)始,或許就注定了計(jì)算機(jī)編程的宏大敘事;我們創(chuàng)造數(shù)據(jù)模型模擬世界,模擬我們身邊的事物,編程和算法的核心目標(biāo)是將問(wèn)題數(shù)據(jù)化可計(jì)算化。
??????什么樣的事物是可以計(jì)算的呢?這個(gè)問(wèn)題的答案一直在被改寫(xiě)。
???????What is? program? What is python?
??????編程是符號(hào)的學(xué)問(wèn),它既包含數(shù)學(xué)、哲學(xué)、語(yǔ)言學(xué),與我們以往的知識(shí)大有不同, 數(shù)學(xué)用函數(shù)和模型來(lái)描述事物,而編程即延襲了這些方法和思想、又開(kāi)創(chuàng)性的提出了很多運(yùn)算的概念, 神經(jīng)網(wǎng)絡(luò)、機(jī)器學(xué)習(xí)這樣的算法既是數(shù)學(xué)又突破了數(shù)學(xué) ,不要急著回答諸如What is program這樣的問(wèn)題 ,也不要急著去回答編程能干什么這樣的問(wèn)題,計(jì)算科學(xué)才剛剛起步就改變了世界, 編程是智慧的飛躍 ,更是是智慧的進(jìn)化,是新時(shí)代的生產(chǎn)工具、思考工具。
???????豐富的代碼組合可以解決許多問(wèn)題,怎么用編程來(lái)解決你的問(wèn)題才是問(wèn)題的核心,你要首先了解你的問(wèn)題,其次你要了解編程.?
????????一直以來(lái)自然語(yǔ)言和文字被用作交流、思考、創(chuàng)造和傳承的工具, 自從有了計(jì)算機(jī)科學(xué)、我們的一切都被改變了,而且這種改變的速度在逐步的加快 ,編程語(yǔ)言不只是一門(mén)技術(shù),而是將來(lái)人們必須掌握的生存技能 .
????????人們因使用而學(xué)習(xí)。而使用是最好的學(xué)習(xí)方法。學(xué)習(xí)Python可以有很多的動(dòng)機(jī),因?yàn)镻ython可以完成太多的工作,初學(xué)者應(yīng)該帶著怎樣的目標(biāo)來(lái)學(xué)習(xí)呢?
????????太多的概念太多的應(yīng)用和場(chǎng)景都在使用Python,這讓初學(xué)者很容易迷失方向,但如果你帶著目標(biāo)來(lái)學(xué)習(xí)將起到事半功倍的效果.
????????為什么要專(zhuān)注于目標(biāo)?當(dāng)我們專(zhuān)注于目標(biāo)來(lái)學(xué)習(xí)Python時(shí)我們可以忽略掉目標(biāo)無(wú)關(guān)的知識(shí)忽略掉學(xué)習(xí)上的選擇困難,.
???????編程已經(jīng)擴(kuò)展到生活和生產(chǎn)的方方面面:網(wǎng)絡(luò),娛樂(lè),藝術(shù),社交App, ai教育,小程序,ERP,財(cái)務(wù),設(shè)計(jì),游戲,物聯(lián)網(wǎng),工控,自動(dòng)化,,智能家居,智能交通,智能穿戴,服務(wù)機(jī)器人,機(jī)器視覺(jué),語(yǔ)音識(shí)別,翻譯,tts語(yǔ)音轉(zhuǎn)換,聲紋技術(shù),生物傳感器,腦機(jī)接口,鑲?cè)胧皆O(shè)備,爬蟲(chóng),云,人工智能,大數(shù)據(jù),區(qū)塊鏈,數(shù)字貨幣,科學(xué)計(jì)算, 這些或成熟或稚嫩的應(yīng)用場(chǎng)景, 都在被硬軟件技術(shù)改造著。未來(lái)越來(lái)越數(shù)字化,越來(lái)越虛擬化。
?????如果你清楚的知道你要用Python去做什么事,那么學(xué)習(xí)就變得簡(jiǎn)單了,Python可以做很多事情。 你需要掌握一門(mén)編程語(yǔ)言,python 是不錯(cuò)的入門(mén)語(yǔ)言。.
????????Python本身并不有趣,但那些人們正在用python所作的事情太有趣了。
python 知識(shí)體系如下表:

入門(mén)第1課
print語(yǔ)句
1, print語(yǔ)句是一個(gè)Python內(nèi)置函數(shù),作用是將括號(hào)中的東西顯示出來(lái),這個(gè)函數(shù)可以顯示幾乎所有的數(shù)據(jù),數(shù)字,字符串,變量,表達(dá)式。
暫停思考:什么是數(shù)據(jù)?什么是數(shù)據(jù)結(jié)構(gòu)?什么是數(shù)據(jù)類(lèi)型?可計(jì)算的東西都可以是數(shù)據(jù),數(shù)據(jù)可以是簡(jiǎn)單結(jié)構(gòu),沒(méi)有結(jié)構(gòu),也可能結(jié)構(gòu)復(fù)雜:比如課表、棋類(lèi)棋譜、圖片、視頻音頻、波形、樂(lè)譜、思維導(dǎo)圖等等.
數(shù)據(jù)類(lèi)型:我們將需要計(jì)算的東西規(guī)范化統(tǒng)一化以便計(jì)算機(jī)能夠存儲(chǔ)計(jì)算。如:int, 布爾,列表、字典,就是我們?cè)O(shè)計(jì)的數(shù)據(jù)類(lèi)型。用type()函數(shù)可以查詢(xún)數(shù)據(jù)的類(lèi)型。
????print語(yǔ)句可以打印很多東西
print(‘money’)
pyint(‘money’*100)
a = range(10)
print(a)
注意:print 既然是一個(gè)函數(shù),函數(shù)后面的括號(hào)自然少不了
x = 558
y = 557
print(x+y)
print 打印布爾表達(dá)式
a = 2
b = 3
print(a>b)? ? #a>b是一個(gè)布爾表達(dá)式,這里的結(jié)果是假False
#是一個(gè)注釋符號(hào),是代碼的解釋?zhuān)?后面的語(yǔ)句不執(zhí)行,只是幫助代碼的閱讀
三個(gè)單引號(hào)和三個(gè)雙引號(hào)常用來(lái)注釋一段代碼,二者效果一樣。
單引號(hào)注釋代碼塊
‘’’
dshskjhkj
jjkjkkjklk
‘’’
雙引號(hào)注釋代碼塊
”“
hjhkj
kljklj?
klkjkljk
”“
在調(diào)試代碼是也會(huì)經(jīng)常使用ctrl + /? 快捷鍵來(lái)注釋掉整塊代碼,再次按ctrl + /? 可以取消注釋
特別要注意:在錄入代碼時(shí),務(wù)必將電腦輸入法切換到英文輸入模式,Python不認(rèn)識(shí)中文標(biāo)點(diǎn)符號(hào)
注意:print函數(shù)默認(rèn)是換行的如果不換行可以在輸出內(nèi)容后加end=' ’用逗號(hào)隔開(kāi)。
????????????????end=‘\n ‘是默認(rèn)參數(shù),默認(rèn)情況換行。
????????????????print ()函數(shù)還有很多參數(shù),在深入學(xué)習(xí)中會(huì)遇到
a = 2
b = 3
print(a>b)
print(a*b)
print(a-b,end='? ')
print(a+b,end='? ')
print(a,a,b,b,)
print('結(jié)束打印')
輸出
False
6
-1? 5? 2 2 3 3
結(jié)束打印
這里的end=’‘之間加了一個(gè)空格
???實(shí)際上我們可以把end 參數(shù)換成很多樣式,以達(dá)到輸出效果,我估計(jì)它的性質(zhì)和關(guān)鍵字參數(shù)類(lèi)似,有興趣可以作些實(shí)驗(yàn)
a = 2
b = 3
print(a>b,end='___\n')
print(a*b,end='7,6,8,7,6,\n')
print(a-b,end='&&\n')
print(a+b,end='1,2,3\n')
print(a,a,b,b)
print(end=' *************? ? ****** ? ? *****? ? *****\n')
print('結(jié)束打印')
輸出
False___
67,6,8,7,6,
-1&&
51,2,3
2 2 3 3
?*************? ? ****** ? ? *****? ? *****
結(jié)束打印
注意”print函數(shù)的兩種格式化輸出%和format。也不是多難,初學(xué)者了解便好。
先來(lái)了解下%后面接不同字母代表的轉(zhuǎn)換意義,%s 表示轉(zhuǎn)換成字符,%o轉(zhuǎn)換成8進(jìn)制
%d轉(zhuǎn)換成10進(jìn)制,%x轉(zhuǎn)換成16進(jìn)制,%o轉(zhuǎn)換成8進(jìn)制,%接f,e,g表示保留不同的有效位,以及小數(shù)點(diǎn)后位數(shù)。%%文字,%i 轉(zhuǎn)換成整數(shù)
例:a = 88,print('a 的大小為:%s'% a) 輸出:a 的大小為:88
%S也被解釋為占位符,先在輸出內(nèi)容中展占位,最后補(bǔ)充說(shuō)明該位置應(yīng)該替換的數(shù)據(jù)
a = 88
b = 99
print('a 的大小為:%s,b 的大小為%s,兩者相差%s'% (a,b,b-a))
輸出:a 的大小為:88,b 的大小為99,兩者相差11
? format 和%差不多
zidian = {'name':'張三','age':'40','tixing':'球型'}
print('大肥豬{name},今年{age}歲,體型已經(jīng)變成{tixing}了'.format(**zidian))
輸出:大肥豬張三,今年40歲,體型已經(jīng)變成球型了
? ? print()函數(shù)還有一個(gè)重要的參數(shù)sep=,用來(lái)設(shè)置分隔符
a = '你好:'
b = '先生'
c = '王'
d = '李'
e = '趙'
f = '小姐'
print(a,c,b,sep='? ? |? ? ? ',end='? -------- ? ---- ? ? ? --\n')
print(a,d,b,sep='? ? |? ? ? ',end='? -------- ? ---- ? ? ? --\n')
print(a,e,f,sep='? ? |? ? ? ',end='? -------- ? ---- ? ? ? --\n')
輸出
你好:? ? |? ? ? 王? ? |? ? ? 先生? -------- ? ---- ? ? ? --
你好:? ? |? ? ? 李? ? |? ? ? 先生? -------- ? ---- ? ? ? --
你好:? ? |? ? ? 趙? ? |? ? ? 小姐? -------- ? ---- ? ? ? --
入門(mén)第2課? 變量及變量賦值
????計(jì)算機(jī)可以存儲(chǔ)數(shù)據(jù),這是馮諾依曼結(jié)構(gòu)的特點(diǎn),我們不用知道數(shù)據(jù)存在硬盤(pán)的和內(nèi)存的什么地方,Python編程要做的,只是給這塊存儲(chǔ)空間起一個(gè)名字。
Python變量命名只有簡(jiǎn)單的幾條規(guī)則:
???????1、變量名[空間的名字]由字母和數(shù)字以及下劃線組成。
???????2、但不能以數(shù)字開(kāi)頭
???????3、下劃線是可以開(kāi)頭的,但這種情況是極特殊:__init__,__main___,__item__
???????4、有一些字母組合是保留關(guān)鍵字,而這些保留關(guān)鍵字是python執(zhí)行器判斷程序結(jié)構(gòu)的依據(jù),在變量命名時(shí)不能使用。
>>> import keyword? ? #導(dǎo)入keywork外置模塊
>>> keyword.kwlist ? ? #用kwlist方法打印python保留關(guān)鍵字
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
注意:以上四條不僅是變量名命名的規(guī)則,同時(shí)也是函數(shù)和類(lèi)的命名規(guī)則.
變量賦值
Python賦值語(yǔ)句的設(shè)計(jì)十分自由簡(jiǎn)潔:例如
a = ’你好世界‘
不需要提前申明變量,約束變量的類(lèi)型,在賦值的一瞬間完成了許多工作。
第1句a = ’你好世界‘就是一條賦值語(yǔ)句,變量a被賦值為’你好世界’,前邊不需要加上數(shù)據(jù)類(lèi)型,Python根據(jù)后面的內(nèi)容自動(dòng)判斷數(shù)據(jù)類(lèi)型
??????變量的賦值也意味著被分配存儲(chǔ)空間 (實(shí)際上只是指向)
???(擴(kuò)展知識(shí):Python的內(nèi)存分配機(jī)制有共用、駐留、銷(xiāo)毀等機(jī)制,可以用is方法判斷兩個(gè)變量是不是被分配到了同一空間,可以用==判斷兩個(gè)變量中存儲(chǔ)的值是否相等,可以用id()的方法查詢(xún)變量存儲(chǔ)的內(nèi)存位置,(地址)。變量被賦值后,可以的隨時(shí)隨地給他賦另外一個(gè)類(lèi)型的值.
??????一個(gè)變量被賦值后編程者要清楚的掌控此時(shí)這個(gè)變量的類(lèi)型,這點(diǎn)很重要。因?yàn)椴煌?lèi)型的數(shù)據(jù)有不同的計(jì)算特性和方法特性。
??????變量對(duì)應(yīng)著存儲(chǔ)空間,你可以先給變量賦予一個(gè)字符,然后過(guò)一陣子再用它來(lái)存儲(chǔ)其他的東西,這是可以的。變量的類(lèi)型type,由它存儲(chǔ)的數(shù)據(jù)決定。
a = 'hj'
print(a)
print(type(a))? ? ? #打印變量a的數(shù)據(jù)類(lèi)型
a = 1
print(a)
print(type(a))? ? ? #再次打印變量a的類(lèi)型
輸出
hj
<class 'str'>
1
<class 'int'> ? ? ? #因?yàn)樽兞縜被重新賦值,所以它的類(lèi)型變了
??????不要糾結(jié)變量的名字,關(guān)注變量中的值才是重點(diǎn),簡(jiǎn)單的一對(duì)一變量賦值一般不會(huì)出錯(cuò),容易出錯(cuò)的地方是,我們?cè)谟米兞拷邮蘸瘮?shù)返回值時(shí)、容易把數(shù)量搞錯(cuò),這時(shí)需要注意,函數(shù)有幾個(gè)輸出就用幾個(gè)變量來(lái)接收,數(shù)量上要匹配否則會(huì)報(bào)錯(cuò).?
??????很多時(shí)候我們的賦值語(yǔ)句不是給變量一個(gè)給定的值而是一個(gè)表達(dá)式 ,甚至是一個(gè)隨著程序運(yùn)行而不斷變化的一個(gè)表達(dá)式 ,這里我們舉幾個(gè)相對(duì)簡(jiǎn)單的例子:
a = 1
b = 2
c = a*b+a/b
print(c)
輸出:2.5
為了追求語(yǔ)句簡(jiǎn)潔,Python還可以批量賦值
a, b, c, d = 1,3,5,9 ? ? #賦值符號(hào)=兩邊個(gè)數(shù)匹配就行,這里同時(shí)給四個(gè)變量賦四個(gè)值
print(a, b, c, d)
輸出
1? 3? 5? 9
???賦值語(yǔ)句還往往將函數(shù)的返回值賦給變量
def just(lst=[1,2,3,4]):
????a, b, c, d = lst[0], lst[1], lst[2], lst[3]
????return a,b,c,d
e,f,g,h = just(lst=[5,6,7,8])
print(e,f,g,h)
輸出
>>> 5 6 7 8
????????函數(shù)的相關(guān)知識(shí)將在后邊學(xué)習(xí),這里只需了解有這樣的賦值形式
?locals()函數(shù),動(dòng)態(tài)變量(難點(diǎn)初學(xué)者可忽略):
如果變量名比較多而這些變量名又是有一定規(guī)律時(shí)可以使用動(dòng)態(tài)賦值?
names =? locals()? ? ? ? ? ? ? ? ? ? ? ? ? #告訴編譯器我要定一個(gè)動(dòng)態(tài)變量names
for i in range(5):
??????names[‘n’+str(i)]=i? ? ? ? ? ? ? ? ? ? #動(dòng)態(tài)生成變量名
print(n0 n1 n2 n3 n4) ? ? ? ? ? ? ? #n0 n1 n2 n3 n4是動(dòng)態(tài)生成的變量
輸出
?01234
???在閱讀代碼時(shí),了解賦值符號(hào)兩邊東西是理解代碼的關(guān)鍵。賦值語(yǔ)句是最簡(jiǎn)單的python知識(shí),但賦值語(yǔ)句又最基礎(chǔ)最普遍最重要的語(yǔ)句,有時(shí)=右邊的結(jié)構(gòu)比較復(fù)雜,要細(xì)心分析表達(dá)式的最終結(jié)果,隨著學(xué)習(xí)的深入,你會(huì)發(fā)現(xiàn),所有的數(shù)據(jù)類(lèi)型都可以賦值給變量,除此之外圖片,視頻,聲音,文件,設(shè)備,網(wǎng)絡(luò)端口等等太多的事物都可以用賦值語(yǔ)句賦值給變量,你會(huì)越來(lái)越了解,變量的意義,賦值的意義,數(shù)據(jù)的意義,計(jì)算的意義。
???????總結(jié):這里我們大概了解了python的知識(shí)體系,了解了print函數(shù),了解了變量的命名規(guī)則,以及變量的賦值,我們可以嘗試給變量賦不同的值并打印出來(lái)。
???????如何作實(shí)驗(yàn):下一節(jié)我們將介紹python的編程平臺(tái)pycharm,在此之前可以使用菜鳥(niǎo)工具的python在線工具https://c.runoob.com/compile/9/ 對(duì)本節(jié)類(lèi)容進(jìn)行練習(xí),手機(jī)瀏覽器也是可以的。代碼寫(xiě)點(diǎn)擊運(yùn)行就可以在下免得輸出框看到結(jié)果。下一節(jié)進(jìn)行數(shù)據(jù)類(lèi)型的學(xué)習(xí)。