你們都是怎麼學 Python 的?

時間 2021-05-05 20:49:18

1樓:大魚

認識的目的是為了實踐,學習的目的是為了應用,建議邊學習邊實踐,將學到的東西變現成自己能看到的成果。剛入門的話可以看看這篇文章介紹的python爬蟲入門例項https://

markdowner.net/article/

121348006158331904

2樓:

現在大二,為了寫進資料去進行分析,每天在B站上自學。Python算是比較簡潔,容易上手的了。應用面也挺廣,我是比對r studio來說的。

3樓:haoran

《Python for Everyone》網課入門Advanced Programming for python面對物件程式設計

資料庫入門

資料結構和演算法

計算機結構

計算機作業系統

資料分析實習

數理統計課程系列

概率論課程系列

高等線性代數

凸優化入門

機器學習入門

資料探勘工作和自學中

4樓:Meta

首先同學你才學了乙個月,千萬別覺得自己失敗,因為程式設計是乙個剛入門的時候最頭疼的學科,因為太多概念太抽象,對於剛接觸程式設計的同學來說,這本來就是災難,但你只要邁過了起步階段,那麼後面的學習都會輕鬆許多

那麼在如何「邁過起步階段」這個話題上我們來展開看一下,我認為其中最重要的一點是

建立正反饋迴圈

學習一門新的技術/知識,最重要的是建立正反饋迴圈,因為如果沒有建立起正反饋迴圈,那麼人都是有惰性的,很容易會放棄,放棄了就前功盡棄了。

那麼正反饋迴圈到底是什麼呢?

成就感->熱愛->專注/堅持->目標達成->成就感

如上所述:這就是正反饋迴圈, 這個迴圈的每乙個節點都顧名思義,同學你也可以看看每乙個節點的前乙個節點都是保證能順利過渡到下個節點的前提

那麼如何建立正反饋迴圈呢? 總不能天天一起床,就拍手鼓掌大喊「我能行,我可以」吧。這其中我們也需要從建立目標出發:

- 建立足夠小的「目標切片」,幫助你產生成就感,

- 想盡辦法實現你的第乙個目標切片,獲得成就感

- 成就感會推動你對事情產生熱愛

- 熱愛會使你更容易在一件事上專注/堅持

- 專注/堅持,會讓你更容易完成下乙個目標切片

話說回來,目前說的這些是學習所有知識/技術都通用的,那麼放在同學你現在的Python學習中,應該如何來操作呢?

我看到有答案寫到,廖老師的教程,我覺得廖老師的課程也挺好,但是需要一定的程式設計基礎,所以不一定適合所有同學,如果同學你是零基礎學習程式設計,那麼你一定還沒有形成自己學習程式設計的正反饋迴圈,這裡我倒還蠻建議「夜曲程式設計」的,因為夜曲程式設計確實是完全針對入門同學來設計的。不僅會從很多入門概念開始講起,更重要的是,我覺得其對於正反饋迴圈的建立有著天然的好處,原因在於兩點

- 幫你把新手入門的所有目標切片設計好了,你只需要跟著學就好了,每學完乙個切片,對新手來說都成就感爆棚,足以使你愛上程式設計,愛上Python

- 每有學習提醒,學習獎勵制度,還可以用手機碎片化學習,防半途廢

另外,除開正反饋迴圈的建立,還有一些措施,可以幫助程式設計新人,擺脫懶癌

那就是有「代價」的學習,效率會更高:無論這個代價是一台好電腦,還是一門好課程,還是乙個好的學習環境,只要是有「付出」的, 自己也會更加重視,更不會輕言放棄

總之,不積跬步,無以致千里

5樓:CyberVy

去年七八月份接觸的python,到現在已經有小半年了。當時的目的很明確,就是做資料分析,機器學習等方面的事情。

這種模式的好處便在於一直能得到正向的反饋,不會覺得程式設計是一件晦澀的事情,甚至都不會體會到自己是在程式設計,更多的是解決實際問題帶來的點滴成就感。如果沒什麼強烈的實際需求的話,我是不太建議學習任何一門計算機語言的,這真的是浪費精力,不要被python培訓廣告洗了腦。在你自己都不太清楚需求的時候,結果無非是還沒入門就半途而廢,或是辛苦入門但永遠吃灰,最後還是白學。

所以學python最好的方式還是找個個人專案,然後堅持做下去,純粹地學習語法而不帶入應用場景實在是太痛苦了。幾個月前,我曾經搜尋過一些關於python的魔法方法和抽象基元類等概念,看得真的是雲裡霧裡。但當後來真正有相關需求的時候,其實用相關方法解決是一件很自然而然的事情。

舉個例子就是,我需要改寫/擴充套件乙個例項的部分方法,並且我並不想重新建立這個例項(重新例項化的時間開銷很大)。這個時候只需要建立乙個類,繼承例項的類,然後接受例項的__dict__就好。很顯然的就是,這個類和傳統的類不一樣,它必然是寫在函式內部的,且這個類是由具體的例項物件所定義的,導致每乙個生成的類都是不一樣的,這也導致了沒有辦法使用isinstance等方法,這個時候抽象基類就派上用場了,同時通過改寫__new__方法,便能像操縱普通的物件一樣,操作這個特殊物件。

具體的例子還有很多,在沒有任何實際背景的情況下,是很難去理解部分概念的。

當然,這過程中,對於我思考問題的方式也是有部分影響的,這就是題外話了,不必再展開了。

6樓:青葉

寫專案的時候邊寫邊學(指stackoverflow和Google)不就會了?

實在感興趣的部分把對應的documentation讀一下。這些現在好像都有官方中文翻譯了,更容易了。

7樓:xu valerio

大家多少都有程式設計基礎,大學都是必修的。

看教程,系統的學其實沒什麼用,記不住還枯燥。 自己的經驗,就是得有乙個具體的專案,實踐帶動理論,剩下的全靠google+youtube。 這些比上課有用多了

8樓:小公尺粥

跟著官方API文件在去找幾個視屏來看基本就可以入門了,之後在找幾個小專案練練手增長點專案經驗,最後找個相關工作進一步實踐基本就可以了

9樓:AndreaBocelli

瀉藥學python之前先學了資料結構,編譯原理,作業系統和微機原理。以及thinking OO。

學python的時候下了一本電子書,看了一下午就會了。

10樓:

昨天我把乙個MatLab程式翻譯成了Python:

[PDF] The Levenberg-Marquardt method for nonlinear least squares curve-fitting problems c | Semantic Scholar

感覺對Python的理解又增加了哈哈哈!

這裡是實現了乙個Levenberg-Marquardt優化方法。這是乙個非線性最小二乘法擬合的方法。通過引入引數 ,實現對梯度下降法和牛頓法組合的乙個方法。

核心公式是:

想要入門可以學習我的三個半小時課程:

11樓:面板小白白

不要急,慢慢來

一、不要一下子吃個胖子。學習程式語言是個循序漸進的過程,沒有誰是一下子學好的。

二、不需要吃透一本書,或者完全搞懂乙個章節。程式語言是一門操作性質很強的學科,學習程式設計應該是 Learning by doing 的過程,不要死啃書。

三、學習 Python ,建議是網上找個教程(廖雪峰的教程就很好),花個一兩天的時間把最基礎的語法有個大概印象,如 list型別,set 型別,dict 型別等。

四、基本語法有了印象之後,就應該開始寫小的專案。比如讀取 txt 檔案,處理 csv 檔案等。

五、在實現專案的過程中,肯定會遇到很多問題。這個時候不要怕,用搜尋引擎查一下,解決問題就好了。

ruicore/python

12樓:人間富貴草

學Pyhton這玩意兒,總得來的激勵嘛!

歪個樓,反正我沒歪完之後你就知道我怎麼學的了。

b話不必多說,我們直接上手三大序列型別之一的列表。

我們下來列數列表的優點:

有序序列;內容可變;長度不限;元素型別不限;增刪查改樣樣精通;中括號索引與區間訪問。

可見其使用之靈活!

1 康康定義列表是用一對中括號括起來的多個元素的有序集合,各元素之間用逗號分隔。

2 建立列表>>> ls=#建立空列表

>>> list=list()#建立空列表

>>> ls1=['cat','dog','bird','goose','duck']#直接賦值建立

>>> print(ls1)

['cat', 'dog', 'bird', 'goose', 'duck']

#利用元組生成列表

>>> ls2=list(('H', 'o', 'l', 'd', ' ', 't', 'h', 'e', ' ', 'd', 'o', 'o', 'r', '!'))

>>> print(ls2)

['H', 'o', 'l', 'd', ' ', 't', 'h', 'e', ' ', 'd', 'o', 'o', 'r', '!']

#結合range()函式

>>> list_num=list(range(5))

>>> print(list_num)

[0, 1, 2, 3, 4]

當然也可以利用tuple()來把列表生成元組。

#利用列表推導式快速生成列表

>>> ls3=[i for i in range(4)]

>>> print(ls3)

[0, 1, 2, 3]

3 增指定位置插入元素

ls.insert(index,x):將元素x插入ls列表下標為index的位置上。

>>> ls3=[1,1.0,print(1),True,['list',1],(1,2),,]

1>>> ls3.insert(1,"俺插入值在此!")

>>> print(ls3)

[1, '俺插入值在此!', 1.0, None, True, ['list', 1], (1, 2), , ]

在列表末尾新增元素

>>> print(ls3)

[1, '俺插入值在此!', 1.0, None, True, ['list', 1], (1, 2), , , '俺是末尾值']

注,前邊的insert也會保留更改!

往列表裡面新增列表

ls+=lt / ls.extend(lt)

>>> ls_num1=list(range(1,4))#左開右閉

>>> ls_num2=list(range(3,0,-1))#逆序

>>> ls_num1+=ls_num2

>>> print(ls_num1)

[1, 2, 3, 3, 2, 1]

>>> print(ls_num1.extend(ls_num2))

None

>>> print(ls_num1)

[1, 2, 3, 3, 2, 1, 3, 2, 1]

4 刪

>>> del ls3[0]

>>> print(ls3)

['俺插入值在此!', 1.0, None, True, ['list', 1], (1, 2), , , '俺是末尾值']

>>> del ls3[1:3]

>>> print(ls3)

['俺插入值在此!', True, ['list', 1], (1, 2), , , '俺是末尾值']

直接賦予空值

>>> ls3[1]=

>>> print(ls3)

['俺插入值在此!ལlist', 1], (1, 2), , , '俺是末尾值']

>>> list_num=list(range(1,4))+list(range(3,0,-1))

>>> list_num.remove(3)

>>> print(list_num)

[1, 2, 3, 2, 1]

清空列表可用ls.clear()

>>> ls3=[1,1.0,print(1),True,['list',1],(1,2),,]

1>>> ls3.clear()

>>> print(ls3)

5 查區間訪問和索引訪問,自不必多言。max()/min();元素出現次數ls.count(x)、長度len(ls);查詢指定值在列表出現的第乙個位置:

ls.index(x):返回ls中x出現的第乙個位置。

>>> ls4=['俺插入值在此!', True, ['list', 1], (1, 2), , , '俺是末尾值']

>>> ls4.index((1,2))

36 改ls4=['俺插入值在此!', True, ['list', 1], (1, 2), , , '俺是末尾值']

>>> ls4[1]='cat'

>>> print(ls4)

['俺插入值在此!', 'cat', ['list', 1], (1, 2), , , '俺是末尾值']

#多增少減

>>> ls4[1:2]=['cat','dog','goose']

>>> print(ls4)

['俺插入值在此!', 'cat', 'dog', 'goose', ['list', 1], (1, 2), , , '俺是末尾值']

>>> ls4[1:4]=['俺是減少值']

>>> print(ls4)

['俺插入值在此!', '俺是減少值', ['list', 1], (1, 2), , , '俺是末尾值']

#ls[i:i:k]=lt

#注意要求是ls[i:j]之間的步長為k,lt是列表

>>> list_num3=list(range(10))

>>> ls_num3=[0,1]

>>> list_num3[5:10:1]=ls_num3

>>> print(list_num3)

[0, 1, 2, 3, 4, 0, 1]

7 排序ls.sort([[key=None,]reverse=False]):ls是待排序列表,key接受乙個函式,通過該函式獲取用於排序時比較大小的資料,reverse指定公升序還是降序排列(False預設公升序,True降序)。

>>> ls=list(range(9))

>>> ls.sort()

>>> print(ls)

[0, 1, 2, 3, 4, 5, 6, 7, 8]

>>> ls.sort(reverse=True)

>>> print(ls)

[8, 7, 6, 5, 4, 3, 2, 1, 0]

#利用匿名函式lambda進行指定排序;

#將列表list_str按元素首字母大小進行排序,公升序;

>>> list_str.sort(key=lambda i:i[0])

>>> print(list_str)

#當然,以上排序也可以先定義乙個函式,再參與排序;

>>> def list_str_sort(i):

return i[0]

>>> list_str.sort(key=list_str_sort,reverse=True)

>>> print(list_str)

小葵花課堂補充知識啦!lambda函式又稱匿名函式,是一種不使用def定義函式的形式。旨在快速定義乙個簡短的函式。

匿名函式並非沒有名字,而是將函式名作為函式結果返回,語法格式如下:

《函式名》 = lambda <[引數1[,引數2,……,引數n]]> : 《表示式》

等價於

def 《函式名》(<[引數1[,引數2,……,引數n]]>):

return 《表示式》

上醣炒栗子!

>>> fun=lambda x,y:x+y

>>> fun(10,1)

11匿名函式也可以不賦與變數函式名。

>>> def funadd(fun,x,y):

return fun(x)+fun(y)

>>> print(funadd(lambda x:x**2,3,-5))#計算3^2+(-5)^2

34>>> print(funadd(lambda x:x**3,3,-5))

-988 複製列表>>> ls1=['cat','dog','bird','goose','duck']

>>> ls1_1=ls1

>>> print(ls1_1)

['cat', 'dog', 'bird', 'goose', 'duck']

>>> ls1[0:2]=[1]

>>> print(ls1_1)

[1, 'bird', 'goose', 'duck']

>>> ls1_1[1]=[0]

>>> print(ls1)

[1, [0], 'goose', 'duck']

注意,簡單講乙個列表賦予另乙個列表並不會產生新的列表物件,即ls1和ls11是對應同乙份資料,當ls1被修改,ls1_1隨之也改變,互相影響。

9 其他小栗子或小技巧

迴圈列表時獲取元素的索引

num=[1,2,3]

str=['one','two','three']

for i,j in zip(num,str):

print(i,"is",j)

#output:

1 is one

2 is two

3 is three

小葵花課堂又補充知識啦!內建函式zip()解析:

zip()函式用於將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表。

#語法結構:

zip([iterable, ...])#iterabl -- 乙個或多個迭代器;

上例子!

>>>a = [1,2,3]

>>> b = [4,5,6]

>>> c = [4,5,6,7,8]

>>> zipped = zip(a,b) # 打包為元組的列表

[(1, 4), (2, 5), (3, 6)]

>>> zip(a,c元素個數與最短的列表一致

[(1, 4), (2, 5), (3, 6)]

>>> zip(*zipped與 zip 相反,*zipped 可理解為解壓,返回二維矩陣式

[(1, 2, 3), (4, 5, 6)]

如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同,利用 * 號操作符,可以將元組解壓為列表。

>>> print("".format("乏了該碎覺了!"))

你們都是怎樣自學python的?

Python頻道 Python是近些年被很多程式設計師奉為 最佳入門選擇 的一種程式語言,相較於C C 等其他的程式語言,Python對於從未接觸過程式語言的人會更友好一些,但如果在學習Python之前曾學習過ASP PHP等其他程式語言的話,顯然會更具優勢,主要原因是所有程式語言的思路都大同小異,...

考研英語,你們都是怎麼學的?

運氣紫紫 目前階段要以背單詞為主,用單詞書就行。我去年用的是周思成考研英語單詞書,他教的記憶方法我感覺很管用。把單詞背過兩遍以後就可以開始學習長難句啦,長難句可以聽一下田靜,宋智鳴或者劉曉艷的課都可以。學完以後就是閱讀,閱讀還是建議先聽課再用真題練習,閱讀老師的話建議唐遲和孔瑋結合起來聽。最後的作文...

你們學街舞都是怎麼堅持下來的?

故里 當你想要放棄的時候,請想象一下以後也許會站在舞台上的你。台下的同學或同事為你的舞姿歡呼,為你鼓掌 xx太牛了!這是人能做出來的動作嗎?臥槽好帥啊 那時候你就會明白你辛苦的練習都是值得的。加油,keep! Rosente 第一次看見它,就想擁有!感覺這世界竟然有街舞這個事情!然後,興趣濃厚,很努...