1、明確學(xué)習目標,不急于求成,不好高騖遠
當下是一個(gè)喧囂、浮躁的時(shí)代。我們總是被生活中大量涌現的熱點(diǎn)所吸引,幾乎沒(méi)有深度閱讀和思考的時(shí)間和機會(huì )。要知道學(xué)習是需要沉下心來(lái)慢慢鉆研的,是長(cháng)期的;同時(shí),學(xué)習不應該被賦予太多的功利色彩。一個(gè) Python 程序員的成長(cháng)路線(xiàn)圖應該是這樣子的:基礎語(yǔ)法–>;語(yǔ)感訓練–>;課題練習–>;分方向繼續學(xué)習–>;中級程序員–>;拓展深度和廣度–>;高級程序員。
然而,很多新手的學(xué)習路線(xiàn)圖卻是這樣子的:學(xué)完基礎語(yǔ)法之后,不了解 HTML 協(xié)議和 Ajax 異步請求,就興沖沖研究爬蟲(chóng)去了;或者,學(xué)完基礎語(yǔ)法,就去搞視覺(jué)識別,連 OpenCV 的數據結構都看不懂;甚至,學(xué)完基礎語(yǔ)法就直接研究神經(jīng)網(wǎng)絡(luò ),結果是重演了一遍從入門(mén)到放棄。
對于剛入門(mén)學(xué)習Python的同學(xué)來(lái)說(shuō),要記住不急于求成,不好高騖遠,一步一步,穩扎穩打,功到自然成。不急于求成,可以避免走彎路,非但不會(huì )延緩你成長(cháng)的速度,反倒會(huì )節省你的時(shí)間。不好高騖遠,達成一個(gè)目標,再制定下一個(gè)目標,在連續的成功和進(jìn)步中,建立起自信心,激發(fā)出更強的學(xué)習興趣。
2、習慣使用IDLE,這是學(xué)習Python好的方式
解釋型語(yǔ)言的優(yōu)勢,就是可以寫(xiě)一句執行一句,想到哪兒寫(xiě)到哪兒,不必像編譯型語(yǔ)言那樣得把程序全部寫(xiě)完,編譯成功后才能運行。推薦使用Python的IDLE,甚至可以拿它當計算器用。很多時(shí)候,可以用IDLE驗證代碼的寫(xiě)法是否正確,查看模塊是否安裝成功以及版本號。IDLE支持tab鍵自動(dòng)補齊,可用這個(gè)功能查看某個(gè)對象的方法和屬性。
零基礎入門(mén)學(xué)習能學(xué)到的有限,還是系統學(xué)習全面。
Python列表定義:按特定順序排列的元素組成。在Python中,用方括號[]來(lái)表示列表,并用逗號來(lái)分隔其中的元素。Python列表是編程中很常見(jiàn)的數據類(lèi)型 。
列表是一種可修改的集合類(lèi)型,其元素可以是數字、string等基本類(lèi)型,也可以是列表、元組、字典等集合對象,甚至可以是自定義的類(lèi)型。其定義方式如下:>>> nums = [1,2,3,4]>>> type(nums)>>> print nums[1, 2, 3, 4]>>> strs = ["hello","world"]>>> print strs['hello', 'world']>>> lst = [1,"hello",False,nums,strs]>>> type(lst)>>> print lst[1, 'hello', False, [1, 2, 3, 4], ['hello', 'world']]
下面我們來(lái)看一下列表中有哪些常見(jiàn)的方法:count():統計某個(gè)元素在列表中出現的次數。index():從列表中找出某個(gè)值第一個(gè)匹配項的索引位置。append():在列表末尾添加新對象。extend():在列表末尾一次性追加另一個(gè)序列的多個(gè)值。insert():在列表的指定位置插入對象。pop():移除列表中的一個(gè)元素(默認最后一個(gè)元素),并且返回該元素的值。remove():移除列表中某個(gè)值的第一個(gè)匹配項。reverse():將列表中的元素反向,不重新拷貝一個(gè)列表。reversed():將列表中的元素反向,重新拷貝一個(gè)列表。sort():將列表中的元素排序,不重新拷貝一個(gè)列表。sortd():將列表中的元素排序,重新拷貝一個(gè)列表。copy():淺拷貝,只是給原來(lái)的列表貼上了一個(gè)新標簽,對于一個(gè)復雜對象的子對象并不會(huì )完全復制,如果有子列表,改變原來(lái)的值,新的拷貝對象也會(huì )改變。deepcopy():深拷貝,將復雜對象的每一層復制一個(gè)單獨的個(gè)體出來(lái)。就是完全拷貝。常見(jiàn)內置函數:max()、min()、sum()、len()、all()、any()、zip()、enumerate()
一些常用的方法1. 逆轉字符串的三種方法1.1. 模擬C++中方法, 定義一個(gè)空字符串來(lái)實(shí)現 通過(guò)設置一個(gè)空字符串, 然后講參數中的字符串從后往前遍歷, 使用字符串的加法合并為新的字符串 復制代碼 代碼如下:def reverse(text) : str = '' index = len(text) - 1 while index >= 0 : str += text[index] index -= 1 return str1.2. 使用切片法 這個(gè)是Python中的一個(gè)特性, 切片可以取負值,這是采用切片的方法,設置步長(cháng)為-1,這樣就實(shí)現了反過(guò)來(lái)排序。
復制代碼 代碼如下:def reverse_1(text) : return text[::-1]1.3. 使用列表 采用列表的reverse方法,先將text轉換為列表,然后通過(guò)reverse方法反轉,然后在通過(guò)join連接為字符串。復制代碼 代碼如下:def reverse_2(text) : temp = list(text) temp.reverse() return ''.join(temp)2. 使用reduce 使用匿名函數和reduce() 復制代碼 代碼如下:def reverse_3(text) : return reduce(lambda x, y : y + x, text) print reverse_3("Hello")3. 遍歷字典的四種方法 復制代碼 代碼如下:dict={"a":"apple","b":"banana","o":"orange"} print "##########dict######################" for i in dict: print "dict[%s]=" % i,dict[i] print "###########items#####################" for (k,v) in dict.items(): print "dict[%s]=" % k,v print "###########iteritems#################" for k,v in dict.iteritems(): print "dict[%s]=" % k,v print "###########iterkeys,itervalues#######" for k,v in zip(dict.iterkeys(),dict.itervalues()): print "dict[%s]=" % k,v4. 遍歷list的三種方法 復制代碼 代碼如下:for key in lst : print key for i in range(len(lst)) : print lst[i] for index, key in enumerate(lst) : print key //index是list的索引5. 字典排序的方法 字典按照value的值從大到小的順序來(lái)排序(默認從小到排序)。
復制代碼 代碼如下:dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0} dict= sorted(dic.iteritems(), key=lambda d:d[1], reverse = True) print dict//輸出的結果:[('aa', 74), ('a', 31), ('bc', 5), ('asd', 4), ('c', 3), ('d', 0)] 下面我們分解下代碼 print dic.iteritems() 得到[(鍵,值)]的列表。然后用sorted方法,通過(guò)key這個(gè)參數,指定排序是按照value,也就是第一個(gè)元素d[1的值來(lái)排序。
reverse = True表示是需要翻轉的,默認是從小到大,翻轉的話(huà),那就是從大到小。對字典按鍵(key)排序:復制代碼 代碼如下:dic = {'a':31, 'bc':5, 'c':3, 'asd':4, 'aa':74, 'd':0} dict= sorted(dic.iteritems(), key=lambda d:d[0]) # d[0]表示字典的鍵 print dict#sorted中第三個(gè)可選參數為reverse, True表示從大到小排序#默認reverse = False6. 子類(lèi)和父類(lèi) 子類(lèi)構造函數調用父類(lèi)的初始化構造函數 復制代碼 代碼如下:class A(object) : def __init__(self) : print "testA class B(A) : def __init__(self) : A.__init__(self) 子類(lèi)調用父類(lèi)的同名函數 復制代碼 代碼如下:super().fuleifunction()7. 更靈活的參數傳遞方式 復制代碼 代碼如下:func2(a=1, b=2, c=3) #默認參數 func3(*args) #接受任意數量的參數, 以tuple的方式傳入 func4(**kargs) #把參數以鍵值對字典的形式傳入 在變量前加上星號前綴(*),調用時(shí)的參數會(huì )存儲在一個(gè) tuple()對象中,賦值給形參。
在函數內部,需要對參數進(jìn)行處理時(shí),只要對這個(gè) tuple 類(lèi)型的形參(這里是 args)進(jìn)行操作就可以了。因此,函數在定義時(shí)并不需要指明參數個(gè)數,就可以處理任意參數個(gè)數的情況。
復制代碼 代碼如下:def calcSum(*args): sum = 0 for i in args: sum += i print sum#調用:calcSum(1,2,3) calcSum(123,456) calcSum()#輸出:65790################################# def printAll(**kargs): for k in kargs: print k, ':', kargs[k] printAll(a=1, b=2, c=3) printAll(x=4, y=5)#輸出:a : 1 c : 3 b : 2 y : 5 x : 4 python的中參數可以多種形式進(jìn)行組合, 在混合使用時(shí),首先要注意函數的寫(xiě)法,必須遵守:1.帶有默認值的形參(arg=)須在無(wú)默認值的形參(arg)之后2.元組參數(*args)須在帶有默認值的形參(arg=)之后3.字典參數(**kargs)須在元組參數(*args)之后 在函數被調用時(shí),參數的傳遞過(guò)程為:1.按順序把無(wú)指定參數的實(shí)參賦值給形參2.把指定參數名稱(chēng)(arg=v)的實(shí)參賦值給對應的形參3.將多余的無(wú)指定參數的實(shí)參打包成一個(gè) tuple 傳遞給元組參數(*args)4.將多余的指定參數名的實(shí)參打包成一個(gè) dict 傳遞給字典參數(**kargs)8. lambda 表達式 lambda 表達式可以看做一種匿名函數 lambda 表達式的語(yǔ)法格式: lambda 參數列表: 表達式 #參數列表周?chē)鷽](méi)有括號,返回值前沒(méi)有 return 關(guān)鍵字,也沒(méi)有函數名稱(chēng) 復制代碼 代碼如下:def fn(x): return lambda y: x + y#調用 a = fn(2) print a(3)#輸出5 分析: fn(2)調用后, 相當于a = lambda y: 2 + y, 然后a(3)被調用時(shí).相當于 print lambda y: 2 + 3。
1、添加元素
添加元素使用列表的內置方法append
number = [1, 2, 3, 4]
number.append(5) # number = [1, 2, 3, 4, 5]
number.append([6,7]) # number = [1, 2, 3, 4, 5, [6, 7]]
number.append({'a':'b'}) # number = [1, 2, 3, 4, [6, 7], {'a', :'b'}
可以看到強大的python列表可以嵌套任意類(lèi)型
2、列表相加
要想連接兩個(gè)列表,可以使用+號連接
a = [1, 2, 3]
b = [4, 5, 6]
c = a + b # c = [1, 2, 3, 4, 5, 6]
也可以使用列表內置方法extend連接兩個(gè)列表
a = [1, 2, 3]
b = [4, 5, 6]
a.extend(b) # a = [1, 2, 3, 4, 5, 6]
用+號會(huì )創(chuàng )建一個(gè)新通對象,使用extend則在原來(lái)的對象上面修改
3、列表去重復
列表本身沒(méi)有去除重復的功能,但是可以借助python的另外一個(gè)類(lèi)型set(help(set)查看)
a = [1, 2, 3, 3,2, 1]
b = list(set(a)) # b = [1, 2, 3]
也可以借助字典類(lèi)型的內置方法
a = [1, 2, 2, 3, 1, 3]
b = {}.fromkeys(a).keys() # b = [1, 2, 3]
可以學(xué)會(huì )的零基礎
學(xué)習Python必須明確的幾點(diǎn):
1. 明確你將來(lái)是做什么工作的,需要掌握哪些技能,很多人連這個(gè)就不知道就盲目的學(xué),你首先清楚,現在公司需要什么人才,你應該奔著(zhù)什么目標努力。Python的學(xué)習方向有很多,主要還是web。
2. 2.系統的學(xué)習規劃,規劃好你每天學(xué)習的新知識和每天做的作業(yè)和練習,很多人想自學(xué)Python,兩個(gè)就看完了,這樣的能找到工作算是出奇了,現在學(xué)習Python想找到工作,沒(méi)有4-6個(gè)月的根本不行,所以規劃是一定要有的,我建議半年時(shí)間。
3. 3.注意學(xué)習方法,很多人在學(xué)習Python的時(shí)候,開(kāi)始學(xué)那一刻起就選擇了錯誤的學(xué)習方法,所以最后注定會(huì )放棄,回到原來(lái)的崗位繼續做著(zhù)自己不喜歡的事情,學(xué)習Python需要一定的技巧,在開(kāi)始學(xué)之前多跟別人問(wèn)問(wèn),不要自己盲目的自學(xué),浪費時(shí)間。
如果只看這個(gè)圖,很多人可能會(huì )看的一頭霧水,特別是學(xué)過(guò)完全面向對象語(yǔ)言的同學(xué), Python 是雙面向的,既可以面向函數編程,也可以面向對象編程,所謂面向函數就是單獨一個(gè). py 文件,里面沒(méi)有類(lèi),全是一些函數,調用的時(shí)候導入模塊,通過(guò)模塊名.函數名()即可調用,完全不需要類(lèi),那么你可能會(huì )問(wèn),那要類(lèi)還有什么毛用? 類(lèi)就是用來(lái)面向對象編程啦,類(lèi)可以有自己的屬性,類(lèi)可以創(chuàng )建很多實(shí)例,每個(gè)實(shí)例可以有不同的屬性,這也就保存了很多私有的數據,總之都有存在的必要.
再來(lái)看上面這張圖,在類(lèi)里面定義的函數就是方法,類(lèi)方法需要@ classmethod 修飾并且有個(gè)隱藏參數 cls,實(shí)例方法必須有個(gè)參數 self, 靜態(tài)方法必須有 @staticmethod修飾,類(lèi)和實(shí)例都可以訪(fǎng)問(wèn)靜態(tài)方法,實(shí)例可以訪(fǎng)問(wèn)實(shí)例方法也可以訪(fǎng)問(wèn)類(lèi)方法,類(lèi)可以訪(fǎng)問(wèn)類(lèi)方法也可以訪(fǎng)問(wèn)實(shí)例方法,訪(fǎng)問(wèn)實(shí)例方法必須要帶參數 self, 可以理解為類(lèi)其實(shí)也是一個(gè)實(shí)例,類(lèi)訪(fǎng)問(wèn)實(shí)例方法不帶參數會(huì )報錯的.類(lèi)本身可以訪(fǎng)問(wèn)函數,實(shí)例卻不行.
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:3.360秒