直擊:初學者都會犯的幾個錯誤和學習路線
對於Python初學者,大家在初期都會遇見很多問題和疑問,
1.i+=1 不等於++i
初學者對Python語言不是特別瞭解的話,又正好有c++,java的語言背景,很容易把++i和i+=1弄混
先來看一個小例子:
i=0
mylist=[1,2,3,4,5,6]
while i print(mylist[i]) ++i 這段代碼會想當然的認為,沒有啥問題啊,一個迴圈輸出,
print(+1)
>>>1
print(++1)
>>>1
print(+++1)
>>>1
這下明白了++i雖然在Python語法是合法的,但是並不是我們理解的自增的操作.
2.分清楚==和is的用法
在判斷字串是否相等的時候,初學者特別會弄混is和==,這樣的結果是程式在不同的情況下表現不同:
比如先看一個簡單的例子:
a='Hi'
b='Hi'
print(a is b)
>>>True
print(a==b)
>>>True #看起來is和==好像是一樣的
我們再看第二個例子:
str1='Wo shi yi ge chi huo'
str2='Wo shi yi ge chi huo'
print(str1 is str2)
>>>False#is的結果是False
print(str1==str2)
>>>True #==的結果為True,看二者不一樣了吧
第三個例子
str3='string'
str4=''.join(['s','t','r','i','n','g'])
print(str3)
>>>string
print(str3 is str4)
>>>False #is的結果是False
print(str3==str4)
>>>True #==的結果為True,看二者不一樣了吧
這就是很容易混淆初學者的地方,感覺很奇怪,為什麼有的時候is和==輸出相同,有的時候不同呢.好我們來一探究竟:
我們用內置的id()這函數,這個函數用來返回物件的記憶體位址,查一下就清楚了
is是物件的標示符,用來比較兩個物件的記憶體空間是不是一樣,
3.連接字串特別是大規模的字串,最好用join 而不是+
字串處理的時候,最常用的是連接,Python中的字串與其他的語言有一點不同,它是不可變物件,一旦創建不能改變.而這個特性直接會影響到Python中字元串連接的效率.
用+連接字串:
str1,str2,str3='test','string','connection'
print(str1+str2+str3)
>>>test string connection
用join連接字串
str1,str2,str3='test ','string ','connection'
print(''.join([str1,str2,str3]))
>>>test string connection
但是若是連接大規模的字串,比如要連接10萬左右的字串的時候,join的方法效率就會快很多(甚至相差百倍).比如下麵這10萬個字元串連接.
long_str_list=['This is a long string' for n in range(1,100000)]
原因是因為若要連接字串:S1+S2+S3+....+SN,由於字串是不可變的物件,執行一次就要申請一塊新的記憶體,這樣的話在N個字元串連接的過程中,會產生N-1個中間結果,每產生一個中間結果就要申請一次記憶體,這樣會嚴重影響執行效率.
而join不一樣,它是一次性申請總的記憶體,然後把字串裡面的每一個元素複製到記憶體中去,
因此,字串的連接,尤其是大的字串處理,最好用join
4.不要在for 和while 迴圈後面寫else 塊
Python 提供了一種很多程式設計語言都不支援的功能,那就是可以在迴圈內部的語句塊後面直接編寫else 塊。比如:
for i in range(3):
print('Loop %d'%i)
else:
print('Else block')
>>>Loop 0
>>>Loop 1
>>>Loop 2
>>>Else block
這種else 塊會在整個迴圈執行完之後立刻運行。既然如此,那它為什麼叫做else 呢?為什麼不叫and ?在if/else 語句中,else 的意思是:如果不執行前面那個if 塊,那就執行else 塊。
同理try/except/else 也是如此,該結構的else 的含義是:如果前面的try 塊沒有失敗,那就執行else 塊。
try/finally 同樣非常直觀,這裡的finally 的意思是:執行過前面的try 塊之後,不管如何總是執行finally塊。
問題來了對於剛接觸Python 的程式師可能會把for/else 結構中的else 塊理解為:如果迴圈沒有正常執行完,那就執行else 塊。
實際上剛好相反——在迴圈裡用break語句提前跳出,會導致程式不執行else 塊,這一點會有點繞.對於不熟悉for/else 的人來說,會令閱讀代碼的人感到相當費解.
嗯,今天也給大家講下,大家在初期學習Python的時候,應該知道的學習規劃,學習路線,以及學習方向。
學習路線
第一部分:
1,開發環境搭建:環境搭建 編輯器 基本調試雙版本相容
2,python基礎:基本知識 物件導向編輯 面相物件設計思想
3,python高級專題
第二部分
:1,linux基礎:獲取與安裝 基本操作 電源,進程,任務管理,vim編輯器 用戶與許可權 包管理
2,python web工具:序列化 網路資源獲取
3,python部署工具:pip virtualenv fabric
4,關係型數據庫:基本理論 DB_API與sqlite3 Mysql
5,Python web框架基礎原理
第三部分:python web開發:
1,web.py 基礎
2,Django基礎
3,Flask基礎
4,Tornado基礎
第四部分:
專案框架開發,專案框架這部分涉及到的東西就太多了,就不給大家一一的列舉出來,就算列舉出來,空間也不夠。
最後說一下,若我寫的對大家有幫助,麻煩大家支持一下,也是對我的一點鼓勵和動力.。
那就執行else 塊。try/finally 同樣非常直觀,這裡的finally 的意思是:執行過前面的try 塊之後,不管如何總是執行finally塊。
問題來了對於剛接觸Python 的程式師可能會把for/else 結構中的else 塊理解為:如果迴圈沒有正常執行完,那就執行else 塊。
實際上剛好相反——在迴圈裡用break語句提前跳出,會導致程式不執行else 塊,這一點會有點繞.對於不熟悉for/else 的人來說,會令閱讀代碼的人感到相當費解.
嗯,今天也給大家講下,大家在初期學習Python的時候,應該知道的學習規劃,學習路線,以及學習方向。
學習路線
第一部分:
1,開發環境搭建:環境搭建 編輯器 基本調試雙版本相容
2,python基礎:基本知識 物件導向編輯 面相物件設計思想
3,python高級專題
第二部分
:1,linux基礎:獲取與安裝 基本操作 電源,進程,任務管理,vim編輯器 用戶與許可權 包管理
2,python web工具:序列化 網路資源獲取
3,python部署工具:pip virtualenv fabric
4,關係型數據庫:基本理論 DB_API與sqlite3 Mysql
5,Python web框架基礎原理
第三部分:python web開發:
1,web.py 基礎
2,Django基礎
3,Flask基礎
4,Tornado基礎
第四部分:
專案框架開發,專案框架這部分涉及到的東西就太多了,就不給大家一一的列舉出來,就算列舉出來,空間也不夠。
最後說一下,若我寫的對大家有幫助,麻煩大家支持一下,也是對我的一點鼓勵和動力.。