Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
貨來了,濃縮了我學(xué)習(xí)python的所有學(xué)習(xí)經(jīng)歷,從中獲取到的經(jīng)驗分享給你,如果你看了沒用,那讓我打你一拳。
高中的我,考了三次高考才勉強(qiáng)考上一個二本大學(xué)一本數(shù)學(xué)專業(yè),你沒聽錯,三次;就像俞敏洪和馬云一樣,我也算和兩位大佬有共同點(diǎn)了。
由于這段經(jīng)歷,在大學(xué)幾年時間,都還時常夢見自己又回到高中,經(jīng)歷高六,然后直接半夜被嚇醒大一的時候,學(xué)習(xí)過一個學(xué)期的c語言,我相信大部分人都學(xué)過,期末考試過后就基本沒有再用過。大二參加過數(shù)學(xué)建模競賽,得過一些小獎,但基本沒什么卵用。參加過數(shù)學(xué)建模競賽的小伙伴應(yīng)該都知道,主流使用SPSS、lingo等傻瓜式軟件,對編程基本沒屌用,matlab好一點(diǎn),但是由于matlab封裝性很高,并且價格不菲,也就漸漸放棄了
到大三開始,基本就屬于混的階段,每天與床伴平行,經(jīng)常曠課,沒事就打游戲、泡妞、唱k、打望、反正沒務(wù)過正業(yè)。
那段時間還沉迷于王者農(nóng)藥,超級喜歡玩李白,還賊菜那種。
我的英語四級連續(xù)考了7次,最高分403分。菜到這種程度,我自己都懷疑自己智商是不是有問題。這種英語水平做一個程序員都困難,很多資料、外國論壇事看不懂的。
雖然程序員不需要多高的英語水平,但是,好的英語閱讀能力會真的會大大開闊你的眼界,提高你的職業(yè)上限,這也是我工作了一年后才漸漸明白的,悔啊!!!要是我能回到大一,一定會對那個無知的SB一巴掌,然后告誡他,"一定要好好學(xué)英語"。不過在這幾年大學(xué)日子,我到還沒有掛過科,唯一掛的就是入學(xué)考試,對,就是那個一進(jìn)校門就要背的規(guī)章制度,我真的是嗶了哈士奇了。
由于我喜歡數(shù)學(xué),數(shù)學(xué)基礎(chǔ)不差,很多數(shù)學(xué)課程隨便學(xué)兩下,就算一學(xué)期沒上過幾次課,考試都是高分通過。
哈哈,這也是我大學(xué)唯一值得自豪的事了,證明我還不是一無是處,完完全全混吃等死。這樣渾渾噩噩過了一年多,到了大四上半年,班上成績好的同學(xué),保研的保研,考研的也考完了,就在等著好消息。
而我呢,其實(shí)也參加了考研,但是,最后一門考試快結(jié)束的時候,我的耳邊響起了一首《涼涼》的鐘聲。直到畢業(yè),我都沒看一眼考研成績。
大概在畢業(yè)那一年的四月份初,我找到了一份實(shí)習(xí)工作,公司很小,一共就10個人左右,主要基于android做游戲開發(fā)。
那個老板人特別好,對我也是非常有耐心,手把手教我計算機(jī)的知識。盡管像他這么有耐心的老板,依然被我的蠢折服了,他給我說命令行,我一臉呆萌的問,命令行是啥東西;還有,我連windows的文件結(jié)構(gòu),文件目錄都搞不太清楚。
實(shí)習(xí)期間,我并沒有做有關(guān)游戲的工作,而是學(xué)習(xí)python、學(xué)習(xí)機(jī)器學(xué)習(xí)的有關(guān)理論。主要原因是老板要求我學(xué)這個,他也想蹭蹭AI的熱度,想轉(zhuǎn)行做人工智能相關(guān)的東西。盡管當(dāng)他給我說深度學(xué)習(xí)的時候,我連這是個什么鬼都不知道。
在那里我待了一個半月的時間,完全自學(xué)了python基礎(chǔ)、tensorflow、自學(xué)了機(jī)器學(xué)習(xí)的一些理論,手推了反向傳播、支持向量機(jī)、決策樹、卷積神經(jīng)網(wǎng)絡(luò)等算法。也在github上找了一些開源項目,學(xué)習(xí)一下別人的代碼。
五月中旬我回到學(xué)校寫畢業(yè)論文,也就那樣,網(wǎng)上抄些東西修修改改,剩下的就是浪了。直到7月初畢業(yè)答辯結(jié)束,滾出了學(xué)校。
我是一直想到一線城市去的,沒辦法,由于學(xué)編程沒多久,學(xué)得不精,也沒能力、更沒有勇氣義無反顧的走出去。要知道,向我這種普通大學(xué)的數(shù)學(xué)本科畢業(yè)是很尷尬的,當(dāng)老師吧,只能去農(nóng)村,去企業(yè)吧,只會些理論知識,啥都干不了;去考公務(wù)員吧,我又不喜歡那種一眼能望到頭的生活。沒辦法,只能回到我實(shí)習(xí)的公司。
在公司待了十多天時間,每天都在想著怎樣去廣州,去那邊找一份工作,但是對未來的恐懼讓我遲遲不敢行動。直到7月23號上午,我發(fā)小來了一個電話:
發(fā)小:問你個事,我室友要辭職了,沒人跟我一起合租,你要不要來?
我:嗯。。。。。。 我考慮一下,明天給你答復(fù)
發(fā)小:要得,你想好了給我說
當(dāng)天,我的心情異常激動,但又極度擔(dān)憂。但我知道,這樣拖下去,我就永遠(yuǎn)待在這里了。
下午我編了一份簡歷,對,就是編的,然后就在前程無憂上投了大概有一百多份,反正廣撒網(wǎng)嘛。沒想到,陸陸續(xù)續(xù)就有好幾家公司給我打電話,叫我去廣州面試。這一下,我有了底氣,心里想著,好幾個面試,也許會有一個中吧。第二天上午就給我發(fā)小打電話說我馬上來廣州,下午就給老板辭職了。辭職后,回家待了一天,然后就坐飛機(jī)飛到了廣州。
到廣州,我面試了大約有8家公司,沒有人要,我記得有一個hr語重心長的給我說了這樣一句話:“你的基礎(chǔ)不太好,但是你還年輕,還有很多時間去學(xué)習(xí),報個培訓(xùn)班、考個在職研究生也可以,加油,小伙子”
當(dāng)時心都涼了大半截,不過,這個hr給我的鼓勵讓我至今都記得這句話,不過,我沒接受他的建議去報一個培訓(xùn)班,依然不停的投簡歷,面試。終于,找到了一家公司。面試過程大致是這樣的:
剛到公司,hr給我了一套面試題,我記得一共有20多道題,而我,只做了兩道選擇題,還是那種邏輯稍微復(fù)雜點(diǎn)的if判斷題。時間到了,hr看了我的試卷,沒說啥,就開始問我的經(jīng)歷我講了數(shù)學(xué)建模的經(jīng)歷,實(shí)習(xí)的經(jīng)歷,雖然我的編程能力不高,但數(shù)學(xué)基礎(chǔ)還算不錯,和hr聊的還比較愉快。然后,hr最后給我說了這樣一句話:
“你這個試卷不能給人事看到,看到肯定就沒戲了”
他把我試卷大卸八塊后扔進(jìn)了垃圾桶。就這樣,我進(jìn)了現(xiàn)在的公司,做有關(guān)機(jī)器學(xué)習(xí)的項目,比如人臉識別、智能客服、語音識別等。至今已經(jīng)一年多了。
目前我依然在這個公司,可能今年就會辭職了。從去年九月份開始,我經(jīng)營自己的公眾號,不到半年時間公號關(guān)注量破萬破萬,知乎關(guān)注量破萬,頭條關(guān)注剛剛?cè)腭v,一天時間關(guān)注量破千,成為了一個自媒體小作者,寫寫文章,偶爾接點(diǎn)小廣告賺點(diǎn)零花錢,雖然不多,但已經(jīng)非常開心了。
上面說了一大堆,看似和問題無關(guān),其實(shí)是有很大的關(guān)系:
1、如果你是非科班畢業(yè)想要轉(zhuǎn)行編程,看了我的經(jīng)歷你一定很有信心與動力,高考三次、常年逃課、混吃等死的我都能,你一樣能。
2、如果你完全零基礎(chǔ),又不想去培訓(xùn),怕被割韭菜,那你可以參考一下我的經(jīng)歷。
3、如果你本身有一些數(shù)據(jù)結(jié)構(gòu)、數(shù)學(xué)理論、或編程語言的基礎(chǔ),你想學(xué)好編程,那你更應(yīng)該有自信,因為你已經(jīng)和那些非科班的人不在一個起跑線了,你只需要不斷地努力,堅持堅持再堅持,就行了。
4、面試的時候,技術(shù)不一定需要非常非常好,特別是剛畢業(yè)的大學(xué)生,你只要有閃光點(diǎn),能讓hr感受到,那還是很有希望的。
現(xiàn)在是真正的干貨開始了我實(shí)習(xí)的時候,python完全零基礎(chǔ),我看的第一個入門資料是一個視頻教程,我覺得非常不錯,分享給大家
Python教程_600集Python從入門到精通教程
網(wǎng)址:https://www.bilibili.com/video/av14184325from=search&seid=12319528533837151178
我開始學(xué)python的時候,看過很多入門書籍,比如《菜鳥教程》、《本辦法學(xué)python》、《python編程從入門到實(shí)踐》,但是沒有一本是真正看完了的,基本都只看了五分之一不到。為什么呢,主要有兩點(diǎn)
1、里面的有些東西講的并不基礎(chǔ),比如我從來沒學(xué)過類,看到類那一章完全處于懵逼狀態(tài),于是放棄了
2、一本書太多了,如果哪個時候你忙其他事忘了,回頭來學(xué)發(fā)現(xiàn),前面的忘得差不多了
所以,看這類型python編程書對新手不太友好,盡管它說是入門書籍。
這個視頻一共六百集,別看這么多,其實(shí)花不了多少時間,每一集也就5、6分鐘,很容易堅持看下去,就算你吃飯、排隊付錢、等公交、甚至拉個屎都能看一集。這樣一集一集,不斷形成正向反饋,你學(xué)的越來越有自信,越有自信越想學(xué),你想想這是多么快樂的事情。并且這個老師講課風(fēng)格很幽默,聽著會很輕松、也很基礎(chǔ)。
一次性別看太多,一次看兩三集,每天多看幾次,定期上機(jī)練手就行了。相信我,我是這樣從零做到的,你也一定行。還有一點(diǎn)必須說明,這個視頻的前兩百集是linux基礎(chǔ),你有興趣可以學(xué),也可以不學(xué),如果是完全的新手,建議你別看,并不影響后面的學(xué)習(xí)。
關(guān)于搜索引擎
真的,放棄百度吧,趕快用google,我遇到過太多次百度上找出一堆無關(guān)緊要的廢話答案,而在google第一個答案就是我想要的情況。好的搜索引擎,會大大提升你學(xué)習(xí)的效率,尤其是作為一個程序員。
百度這種東西,只適合拿來搜索八卦新聞,不適合搜索學(xué)術(shù)、知識。
當(dāng)然拉,知乎也是一個找優(yōu)質(zhì)資源的途徑,比如你現(xiàn)在看到我的回答。
這里我再推薦一下其他的視頻資料,也是非常好的,可以搭配看
1、[小甲魚]零基礎(chǔ)入門學(xué)習(xí)Python
網(wǎng)址:https://www.bilibili.com/video/av4050443?from=search&seid=3592529169870904984
2、【python教程】數(shù)據(jù)分析——numpy、pandas、matplotlib
網(wǎng)址:https://www.bilibili.com/video/av57023791?from=search&seid=3592529169870904984
還要著重提醒一下大家,學(xué)到一定階段過后,一定要注意看官方文檔,百度搜到的很多知識真的很垃圾,這種時候在百度上花費(fèi)太多時間簡直是暴殄天物,貼上官方文檔地址:
https://www.python.org/
官方文檔永遠(yuǎn)是你最堅實(shí)的后盾,這上面包含了python的一切
如果你不喜歡看視頻,這里有一些高質(zhì)量的文檔分享給你:
Vamei老師:【python快速教程】 https://www.cnblogs.com/vamei/archive/2012/09/13/2682778.html
廖雪峰老師:【python教程】https://www.liaoxuefeng.com/wiki/897692888725344
《笨辦法學(xué) Python》:這本書絕對是最簡單的學(xué)習(xí) Python 的方法,本書的 HTML 在線版是完全免費(fèi)的。http://learnpythonthehardway.org/book/
Python Weekly:每周更新,包括Python相關(guān)的文章、教程、演講、書籍、項目、工作等。http://www.pythonweekly.com/
Python challenge:用Python編程技能解決33個謎題,闖關(guān)。http://www.pythonchallenge.com/
編程零基礎(chǔ)應(yīng)當(dāng)如何開始學(xué)習(xí) Python ? - 知乎 https://www.zhihu.com/question/20039623
Python 初學(xué)者的最佳學(xué)習(xí)資源 - Python - 伯樂在線 http://python.jobbole.com/82399/
如果你已經(jīng)學(xué)完了基礎(chǔ),需要在特定的方向上有所提高,比如web、爬蟲,那我有一些資源給你:
web項目練習(xí)
web機(jī)器人:
Python搭建的web接口聊天機(jī)器人-CSDN下載?download.csdn.net
https://download.csdn.net/download/tobacco5648/9417643
web實(shí)戰(zhàn):
https://github.com/michaelliao/awesome-python-webapp
博客BBS論壇系統(tǒng):
Python之路【第十八篇】Django小項目簡單BBS論壇部分內(nèi)容知識點(diǎn) - Mr.心弦 - 博客園?https://www.cnblogs.com/luotianshuai/p/5331982.html
成績管理系統(tǒng):
一個使用django開發(fā)的綜合成績管理系統(tǒng) - 開源中國社區(qū)
https://link.zhihu.com/?target=https%3A//www.oschina.net/code/snippet_209440_19482
新聞系統(tǒng):
python項目練習(xí)四:新聞聚合 | the5fire的技術(shù)博客?
https://www.the5fire.com/python-pro4-newsagent.html
爬蟲項目練習(xí)
爬取知乎:
http://zhihu-py3.readthedocs.io/zh_CN/latest/
爬取豆瓣:
https://github.com/fanpei91/doubanspiders
爬取京東:
https://github.com/Adyzng/jd-autobuy
爬取新浪微博:
https://github.com/dataabc/weiboSpider
爬取微信:
https://github.com/CoolWell/wechat_spider
如果你在特定方向?qū)W習(xí)的過程中,發(fā)現(xiàn)你的python基礎(chǔ)不牢固,需要進(jìn)一步學(xué)習(xí)python,我推薦你看這本書:
https://python3-cookbook.readthedocs.io/zh_CN/latest/c01/p13_sort_list_of_dicts_by_key.html
毫不夸張的說,這是我看到的有關(guān)python進(jìn)階最好的書了,名字叫python-cookbook,簡直良心作品。沒有之一。上面的所有代碼復(fù)制就能運(yùn)行,非常方便調(diào)試。
如果你看了我的推薦還是不滿足,那我這里我推薦一些其他好的博主:
Python 有哪些好的學(xué)習(xí)資料或者博客?? https://www.zhihu.com/question/34907211
你可以去看看這個答案,有比較詳細(xì)的介紹。
我這里再推薦一個我非常喜歡的一個博主,文章都非常精辟:
http://blog.konghy.cn/2016/06/23/python3-new-feature/
python其實(shí)真的很好學(xué)習(xí),入門也很簡單,刻苦一點(diǎn),花一周時間,就算你完全是編程小白,入門也是完全沒問題的。你看看我,非科班,沒有經(jīng)過任何培訓(xùn),高考考三次才勉強(qiáng)上一本的人,都能學(xué)會,你也一定能。
但是,python想要學(xué)好真的不容易,需要你花大量的時間,刻苦專研,才能游刃有余
“苦心人,天不負(fù),臥薪嘗膽,三千越甲可吞吳”
與諸君共勉
程目錄
當(dāng)前網(wǎng)上優(yōu)秀的Python入門類教程、網(wǎng)課數(shù)不勝數(shù)。我并不擅長寫入門教程,湊個熱鬧,僅以我個人入門Python的學(xué)習(xí)過程為線索,為大家推薦各個階段、知識點(diǎn)的優(yōu)秀教程。
首先推薦幾份優(yōu)秀的入門教程:
https://www.liaoxuefeng.com/wiki/1016959663602400 廖雪峰的教程
https://docs.python.org/zh-cn/3/tutorial/ Python官方文檔提供的教程(雖然不太適合入門,但是非常適合當(dāng)百科全書用)
https://www.runoob.com/python3/python3-tutorial.html 菜鳥教程的Python3教程
http://c.biancheng.net/python/base/ C語言中文網(wǎng)的教程
下面是我個人學(xué)Python的過程總結(jié)及推薦教程。其中學(xué)習(xí)目標(biāo)為該過程推薦理解、實(shí)現(xiàn)的內(nèi)容;擴(kuò)展知識為該學(xué)習(xí)階段涉及的更復(fù)雜應(yīng)用,不需要在當(dāng)前階段理解、實(shí)現(xiàn)。
在學(xué)習(xí)一門編程語言之前,我們首先要了解它是什么,我們?yōu)槭裁匆獙W(xué)它而不是學(xué)習(xí)其他的編程語言。雖然這個在短期內(nèi)對學(xué)習(xí)沒什么影響,但是長期來看對學(xué)習(xí)還是挺有指導(dǎo)意義的,另外遇到程序猿也可以多點(diǎn)話題。
廖雪峰Python教程:Python簡介
https://www.liaoxuefeng.com/wiki/1016959663602400/1016959735620448
Python官方文檔:課前甜點(diǎn)
https://docs.python.org/zh-cn/3/tutorial/appetite.html
根據(jù)我之前的“教學(xué)”體驗,編程語言的環(huán)境搭建大多都對初學(xué)者并不友好,出現(xiàn)一些特殊異常有可能直接勸退。所以個人推薦在學(xué)習(xí)最初先不必搭建環(huán)境,可以先用線上編輯器學(xué)習(xí)(在學(xué)習(xí)第三方模塊前都可以先用線上編輯器)。
Python在線編輯器:好用的Python在線編輯器推薦
Python環(huán)境搭建:Python+Pip開發(fā)環(huán)境安裝
首先,我們理解一些最基本的東西,包括如下內(nèi)容:輸入和輸出、變量、數(shù)據(jù)類型、運(yùn)算符。如果有其他編程語言的基礎(chǔ),其實(shí)只需要了解一下輸入和輸出的函數(shù)即可。
在學(xué)習(xí)的過程中,您可以嘗試實(shí)現(xiàn)以下練習(xí):
(1)輸入和輸出
學(xué)習(xí)目標(biāo):實(shí)現(xiàn)在控制臺輸出“Hello World”
廖雪峰Python教程:輸入和輸出
https://www.liaoxuefeng.com/wiki/1016959663602400/1017032074151456
擴(kuò)展知識:
print()函數(shù)的詳細(xì)用法
CSDN-TCatTime的博客:Python print()函數(shù)
https://blog.csdn.net/TCatTime/article/details/83450692
菜鳥教程:輸入和輸出(輸出格式美化)
https://www.runoob.com/python3/python3-inputoutput.html
(2)交互模式/命令行模式
學(xué)習(xí)目標(biāo):理解Python的命令行模式和交互模式之間的區(qū)別,了解兩個模式的啟動方法
博客園大魚biubiu博客:命令行模式和python交互模式
https://www.cnblogs.com/zhanym/p/9984571.html
(3)變量及數(shù)據(jù)類型
學(xué)習(xí)目標(biāo):
廖雪峰Python教程:數(shù)據(jù)類型和變量
https://www.liaoxuefeng.com/wiki/1016959663602400/1017063826246112
擴(kuò)展知識:
①字符串變量的詳細(xì)用法(建議在學(xué)習(xí)運(yùn)算符后學(xué)習(xí))
菜鳥教程:字符串
https://www.runoob.com/python3/python3-string.html
②數(shù)字變量的詳細(xì)用法(建議在學(xué)習(xí)運(yùn)算符后學(xué)習(xí))
菜鳥教程:數(shù)字(Number)
https://www.runoob.com/python3/python3-number.html
(4)運(yùn)算符
學(xué)習(xí)目標(biāo):理解算術(shù)運(yùn)算符、比較運(yùn)算符、賦值運(yùn)算符、邏輯運(yùn)算符、成員運(yùn)算符、身份運(yùn)算符以及運(yùn)算符優(yōu)先級順序
菜鳥教程:運(yùn)算符
https://www.runoob.com/python3/python3-basic-operators.html#ysf6
各個運(yùn)算符的詳細(xì)用法可以參見以下教程(邏輯運(yùn)算符建議在學(xué)習(xí)條件判斷之后學(xué)習(xí)):
C語言中文網(wǎng):Python算術(shù)運(yùn)算符
http://c.biancheng.net/view/2183.html
C語言中文網(wǎng):Python賦值運(yùn)算符
http://c.biancheng.net/view/2182.html
C語言中文網(wǎng):Python比較運(yùn)算符
http://c.biancheng.net/view/4258.html
C語言中文網(wǎng):Python邏輯運(yùn)算符
http://c.biancheng.net/view/2186.html
(5)列表 list / 元組 tuple / 集合 set / 字典 dict
學(xué)習(xí)目標(biāo):列表、元組、集合、字典的定義、訪問、修改、刪除方法以及運(yùn)算符;了解其函數(shù)和方法(建議在學(xué)習(xí)函數(shù)之后學(xué)習(xí));了解其截取和拼接(建議在學(xué)習(xí)切片器之后學(xué)習(xí))
菜鳥教程:列表
https://www.runoob.com/python3/python3-list.html
菜鳥教程:元組
https://www.runoob.com/python3/python3-tuple.html
菜鳥教程:集合
https://www.runoob.com/python3/python3-set.html
菜鳥教程:字典
https://www.runoob.com/python3/python3-dictionary.html
接下來,我們需要了解控制程序基本運(yùn)行流程的方法(就是把高中學(xué)的程序框圖在Python中實(shí)現(xiàn)出來),主要包括條件判斷和循環(huán)。
在學(xué)習(xí)的過程中,您可以嘗試實(shí)現(xiàn)以下兩個練習(xí):
首先推薦完整講述程序流程的教程:
Python官方文檔:其他流程控制工具(4.1-4.5)
https://docs.python.org/zh-cn/3/tutorial/controlflow.html
(1)條件判斷
學(xué)習(xí)目標(biāo):掌握條件判斷語句寫法,建議實(shí)現(xiàn)推薦教程中BMI計算的練習(xí)
廖雪峰Python教程:條件判斷
https://www.liaoxuefeng.com/wiki/1016959663602400/1017099478626848
(2)循環(huán)
學(xué)習(xí)目標(biāo):掌握if和while的使用方法,了解break、continue和else子句
菜鳥教程:循環(huán)語句
https://www.runoob.com/python3/python3-loop.html
練習(xí)的實(shí)現(xiàn)代碼
菜鳥教程:獲取 100 以內(nèi)的質(zhì)數(shù)(方法一)
https://www.runoob.com/python/python-get-prime-number.html
CSDN-chenlunju的博客:python求斐波那契數(shù)列中第n個數(shù)的值(方法一)
https://blog.csdn.net/chenlunju/article/details/85603662
在掌握了基本語法和基本程序流程后,其實(shí)已經(jīng)基本上可以實(shí)現(xiàn)出大部分想要實(shí)現(xiàn)的內(nèi)容了,但是此時的程序會包含很多重復(fù);而函數(shù)就是用來精簡程序,提高程序可讀性的有效方法。在這個階段,我們需要掌握定義函數(shù)、調(diào)用函數(shù)、函數(shù)參數(shù),并對遞歸函數(shù)的使用方法略作了解。
在學(xué)習(xí)的過程中,您可以嘗試實(shí)現(xiàn)以下練習(xí):
(1)什么是函數(shù)?
首先,我們需要理解什么是函數(shù),函數(shù)是用來干什么的。在理解計算機(jī)函數(shù)時,可以借助數(shù)學(xué)函數(shù)和Excel的函數(shù)來輔助理解。
百度知道:什么是計算機(jī)函數(shù)?(第二個回答)
https://zhidao.baidu.com/question/168286141.html
廖雪峰Python教程:函數(shù)
https://www.liaoxuefeng.com/wiki/1016959663602400/1017105145133280
(2)定義、調(diào)用函數(shù)
學(xué)習(xí)目標(biāo):熟練掌握調(diào)用Python內(nèi)置函數(shù)、定義函數(shù)并調(diào)用定義的函數(shù)的方法
①調(diào)用Python內(nèi)置的函數(shù)
廖雪峰Python教程:調(diào)用函數(shù)
https://www.liaoxuefeng.com/wiki/1016959663602400/1017105451316128
②定義并調(diào)用定義的函數(shù)
廖雪峰Python教程:定義函數(shù)
https://www.liaoxuefeng.com/wiki/1016959663602400/1017106984190464
Python官方文檔:定義函數(shù)(4.6)
https://docs.python.org/zh-cn/3/tutorial/controlflow.html#defining-functions
(3)函數(shù)的參數(shù)
學(xué)習(xí)目標(biāo):掌握函數(shù)的普通參數(shù)(位置參數(shù))、默認(rèn)參數(shù)(a=None)、可變參數(shù)(*)、關(guān)鍵詞參數(shù)(**)的用法,了解強(qiáng)制位置參數(shù)(/)的用法
廖雪峰Python教程:函數(shù)的參數(shù)
https://www.liaoxuefeng.com/wiki/1016959663602400/1017261630425888
(4)遞歸函數(shù)
學(xué)習(xí)目標(biāo):簡單了解遞歸函數(shù)的用法
廖雪峰Python教程:遞歸函數(shù)
https://www.liaoxuefeng.com/wiki/1016959663602400/1017268131039072
5.高級特性
以下高級特性除切片器以外,在現(xiàn)階段只需要大致了解即可,只要在用的時候能夠想起可能有一種更優(yōu)解即可。這里我選擇了幾個我在剛?cè)腴T時比較常用的特性(可以和我應(yīng)用場景相關(guān)),推薦了相關(guān)教程。建議大家學(xué)習(xí)一下廖雪峰的Python教程中對于高級特性的講解,包括高級特性和函數(shù)式編程(函數(shù)高級特性)兩個部分。
(1)切片器
廖雪峰Python教程:切片器
https://www.liaoxuefeng.com/wiki/1016959663602400/1017269965565856
(2)裝飾器
博客園-菩提樹下的楊過的博客:python:函數(shù)的高級特性(三、裝飾器)
https://www.cnblogs.com/yjmyzz/p/advanced-feature-of-python-function.html
(3)迭代
廖雪峰Python教程:迭代
https://www.liaoxuefeng.com/wiki/1016959663602400/1017316949097888
(4)列表生成式
博客園-上海悠游的博客:列表生成式
https://www.cnblogs.com/yoyoketang/p/9274362.html
(5)偏函數(shù)
廖雪峰Python教程:偏函數(shù)
https://www.liaoxuefeng.com/wiki/1016959663602400/1017454145929440
博客園-菩提樹下的楊過的博客:python:函數(shù)的高級特性(四、偏函數(shù))
https://www.cnblogs.com/yjmyzz/p/advanced-feature-of-python-function.html
6.模塊
熟悉了函數(shù)和高級特性之后,基本上就已經(jīng)掌握了語言的基礎(chǔ),可以實(shí)現(xiàn)一些小功能了。但是,很多功能我們?nèi)匀粺o法實(shí)現(xiàn),或者實(shí)現(xiàn)起來非常麻煩,例如讀寫文件、讀取系統(tǒng)時間等等,這時候我們就需要引入Python的內(nèi)置模塊和一些第三方模塊了。同樣,當(dāng)我們的程序代碼越寫越多的時候,我們也需要將我們的代碼整理到不同的.py文件中,使用模塊維護(hù)。
在學(xué)習(xí)的過程中,您可以嘗試實(shí)現(xiàn)以下練習(xí):
(1)定義及調(diào)用模塊
菜鳥教程:模塊(“深入模塊”之前的部分)
https://www.runoob.com/python3/python3-module.html
(2)安裝第三方模塊
Python官方模塊下載地址
https://pypi.python.org/pypi
阿里云鏡像Python模塊下載地址(在里面直接Crtl+F搜索模塊名即可)
http://mirrors.aliyun.com/pypi/simple/
安裝第三方模塊大概分為如下過程:嘗試直接用pip安裝import導(dǎo)入的模塊名;如果安裝失敗,百度模塊名,看看是不是模塊名錯誤或者存在其他錯誤;如果仍然安裝失敗,自行下載適合自己的安裝包版本,本地安裝。如果本地有多個Python環(huán)境,注意模塊包安裝在了哪個Python環(huán)境下。
①pip安裝
博客園-miaoning的博客:python如何安裝第三方模塊(方法一)
https://www.cnblogs.com/miaoning/p/10910972.html
②自行下載模塊包安裝
博客園-楓子的博客:安裝Python第三方模塊
https://www.cnblogs.com/fengzzi/p/10040669.html
(3)常用模塊
Python標(biāo)準(zhǔn)庫
https://docs.python.org/zh-cn/3/library/index.html
Python官方文檔模塊文檔地址
https://docs.python.org/zh-cn/3/library/{模塊名}.html
以下常用模塊不需要了解它們所有的具體功能,但需要知道一些常用功能可以通過什么模塊實(shí)現(xiàn),在使用時再具體學(xué)習(xí)對應(yīng)模塊的用法。
7.面對對象
因為我個人在學(xué)Python前主要是用Java,而Java是完全面對對象的語言,所以我在學(xué)Python的過程中沒有理解對象的過程。我只能推薦幾份教程,但是否適合于初學(xué)者理解對象并不能確定。
廖雪峰Python教程:面對對象編程
https://www.liaoxuefeng.com/wiki/1016959663602400/1017495723838528
菜鳥教程:面對對象
https://www.runoob.com/python3/python3-class.html
作者:長行 (Python系列教程:A001)
- 最近因工作需要學(xué)習(xí)python
- 學(xué)習(xí)資料:
- 菜鳥Python3教程https://www.runoob.com/python3/python3-tutorial.html
- 廖雪峰Python博客https://www.liaoxuefeng.com/wiki/1016959663602400/
- 以菜鳥為主,廖雪峰補(bǔ)充
- 學(xué)習(xí)耗時:先花3天左右將菜鳥教程從頭到尾過一遍
- 了解基本環(huán)境、語法、庫
- 了解教程的目錄章節(jié)結(jié)構(gòu),知道需要的知識去哪一章查詢
- 動手實(shí)踐:
- 對于有編程經(jīng)驗來說python上手還是非常簡單的
- 但技術(shù)細(xì)節(jié)是過眼煙云
- 最好的辦法是使用他寫一個小系統(tǒng),持續(xù)迭代,后續(xù)只需查閱之前用法即可
- 本文的后面部分就是使用Flask框架來搭建、部署一個簡單web應(yīng)用
- 官方文檔https://dormousehole.readthedocs.io/en/latest/index.html
- Flask為python語言的輕量級web框架
- Flask vs Django
- Django大而全
- Flask更偏向提供輕量級api服務(wù)
# 切換python虛擬環(huán)境為pyspark
conda activate pyspark
# 安裝Flask
pip install Flask
# 檢查Flask版本
>>> import flask
>>> flask.__version__
'2.1.2'
# coding:utf8
'''
本演示代碼參考官方文檔quickstart:
https://dormousehole.readthedocs.io/en/latest/quickstart.html
'''
from flask import make_response, redirect, session, url_for
from flask import Flask
from flask import render_template
from flask import request
from werkzeug.utils import secure_filename
from flask import abort
import os
app=Flask(__name__)
# 秘鑰設(shè)置
app.secret_key=os.urandom(16)
@app.route("/")
def index():
# 已登錄的返回登陸信息
if 'username' in session:
# return f'Logged in as {session["username"]}'
return f'''
<p>Logged in as {session["username"]}</p>
<form action="logout">
<input type="submit" value="Logout" />
</form>
'''
# 未登錄的重定向到登錄頁
return redirect(url_for('login'))
@app.route("/login", methods=['GET', 'POST'])
def login():
if request.method=='POST':
# 模擬登陸成功設(shè)置session
# 然后重定向到index
session['username']=request.form['username']
return redirect(url_for('index'))
else:
# 返回登陸頁
return '''
<form method='post'>
<p><input type=text name=username>
<p><input type=submit value=Login>
</form>
'''
@app.route('/logout')
def logout():
# remove the username from the session if it's there
session.pop('username', None)
return redirect(url_for('index'))
# 接口路徑參數(shù)、查詢參數(shù)、cookies使用演示
@app.route("/hello/")
@app.route("/hello/<name>")
def hello(name=None):
print('request=', request)
searchWord=request.args.get('key', '')
print('searchWord=', searchWord)
token=request.cookies.get('token', '')
print(f'token={token}')
# return render_template('hello.html', name=name)
rt=render_template('hello.html', name=name)
resp=make_response(rt)
resp.set_cookie('token', 'the_token')
return resp
# 文件上傳演示
@app.route("/upload", methods=['GET', 'POST'])
def upload():
file=request.files['file']
# 獲取上傳文件的源文件名
file.save(f'/home/dev/test/upload/{secure_filename(file.filename)}')
return "success"
# 404頁面演示
@app.route("/404", methods=['GET', 'POST'])
def error():
abort(404)
# 404頁面設(shè)置
@app.errorhandler(404)
def not_found(error):
resp=make_response(render_template('404.html'), 404)
resp.headers['X-Something']='A value'
return resp
# Restful API演示: 返回JSON
@app.route("/me")
def me_api():
return {
"username": "M",
"theme": "theme",
"image": url_for("static", filename="style.css"),
}
if __name__=='__main__':
print('app.run()...')
app.run(port=5000)
pytools/templates/hello.html:
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello, World!</h1>
{% endif %}
pytools/templates/404.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Not Found</title>
</head>
<body>
Page Not Found !
</body>
</html>
pytools/static/style.css
/* 無內(nèi)容 */
方式一:使用flask運(yùn)行
# 切換到app.py目錄
cd pytools
#設(shè)置環(huán)境變量FLASK_APP
export FLASK_APP=app #不設(shè)置默認(rèn)為app
#運(yùn)行
flask run
運(yùn)行結(jié)果:
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000 (Press CTRL+C to quit)
注意: 此種方式不會執(zhí)行__name__=='__main__'的內(nèi)容
方式二:使用python運(yùn)行
# 通過python -m app 或 python app.py
# 切換到app.py目錄
cd pytools
#python -m app
python app.py
運(yùn)行結(jié)果:
app.run()...
* Serving Flask app 'app' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:8080 (Press CTRL+C to quit)
通過運(yùn)行輸出日志可見LISTEN PORT為8080
注意: 此種方式會執(zhí)行__name__=='__main__'的內(nèi)容
uwsgi官方文檔: https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html
# 切換到使用的python虛擬環(huán)境(我這里是pyspark)
conda activate pyspark
# 通過pip安裝uwsgi
pip install uwsgi
# 報錯找不到libpython3.9.a
#=> 是因為python覺得python.xx.a文件大家日常使用較少,所以在新版本中默認(rèn)不生成python.xx.a文件
# 因此需要編譯python源代碼來生成libpython3.9.a文件
# 下載python3.9.12版本源代碼(我本地anaconda3 python版本為3.9.12)
wget https://www.python.org/ftp/python/3.9.12/Python-3.9.12.tgz
#解壓
tar xzvf Python-3.9.12.tgz
#進(jìn)入源碼目錄
cd Python-3.9.12
#編譯器配置安裝目錄
./configure --prefix=/tmp/python3.9.12
#注意不要帶上--enable-optimizations參數(shù),會導(dǎo)致gcc版本問題
#./configure --prefix=/tmp/python3.9.12 --enable-optimizations
#編譯
make
#安裝,會安裝在之前設(shè)置的/tmp/python3.9.12目錄
make install
#進(jìn)入安裝目錄
cd /tmp/python3.9.12
# 復(fù)制libpython3.9.a到指定的目錄(pip install uwsgi報錯會提示在config-3.9-x86_64-linux-gnu目錄找不到libpython3.9.a文件)
cp libpython3.9.a /export/server/anaconda3/envs/pyspark/lib/python3.9/config-3.9-x86_64-linux-gnu/
# 重新執(zhí)行uwsgi安裝
pip install uwsgi
#繼續(xù)報錯: collect2: error: ld returned 1 exit status
#類似問題是gcc或依賴庫版本不兼容導(dǎo)致
#查詢資料后給出解決辦法是使用conda來安裝uwsgi
conda install uwsgi
#使用conda安裝還是失敗,查詢資料后還是依賴的庫或版本不兼容導(dǎo)致
#給出解決辦法是設(shè)置conda的channel(類似maven倉庫源)
#然后更新conda
#然后重新安裝
#conda channel具體可參考https://www.jianshu.com/p/eba58694537b
#設(shè)置channel為conda-forge
conda config --add channels conda-forge
#查看當(dāng)前channels
conda config --get channels
# 安裝conda
conda install conda
# 更新conda
conda update conda
# 重新安裝uwsgi
conda install uwsgi
安裝成功
#查看uwsgi版本
uwsgi --version
2.0.20
#查看uwsgi對應(yīng)python版本
uwsgi --python-version
3.9.12
pytools/config.ini
#在項目根目錄(pytools)創(chuàng)建配置文件config.ini
[uwsgi]
master=true
#python代碼熱更新
py-autoreload=1
#uwsgi啟動時,所使用的地址和端口(這個是http協(xié)議的)
http=0.0.0.0:8000
#指向網(wǎng)站目錄
chdir=/home/dev/test/pyspark/pytools
#python 啟動程序文件
wsgi-file=app.py
#python 程序內(nèi)用以啟動的application 變量名
callable=app
#處理器數(shù)
processes=4
#線程數(shù)
threads=2
uid=dev
gid=dev
# uwsgi的進(jìn)程名稱前綴
procname-prefix-spaced=etd
# 退出uwsgi是否清理中間文件,包含pid、sock和status文件
vacuum=true
# socket文件,配置nginx時候使用
# socket=%(chdir)/uwsgi/uwsgi.sock
# status文件,可以查看uwsgi的運(yùn)行狀態(tài)
#stats=%(chdir)/uwsgi/uwsgi.status
# pid文件,通過該文件可以控制uwsgi的重啟和停止
pidfile=%(chdir)/uwsgi/uwsgi.pid
# 日志文件,通過該文件查看uwsgi的日志
daemonize=%(chdir)/uwsgi/uwsgi.log
#進(jìn)入項目根目錄
cd pytools
#創(chuàng)建uwsgi目錄
mkdir uwsgi
#啟動
uwsgi config.ini
[uWSGI] getting INI configuration from config.ini
#查看進(jìn)程
ps -ef|grep etd
dev 9388 27859 0 21:05 ? 00:00:02 etd uWSGI worker 1
dev 9389 27859 0 21:05 ? 00:00:02 etd uWSGI worker 2
dev 9392 27859 0 21:05 ? 00:00:02 etd uWSGI worker 3
dev 9393 27859 0 21:05 ? 00:00:02 etd uWSGI worker 4
dev 9394 27859 0 21:05 ? 00:00:00 etd uWSGI http 1
root 20149 11597 0 21:47 pts/5 00:00:00 grep --color=auto etd
dev 27859 1 0 20:14 ? 00:00:11 etd uWSGI master
uwsgi --ini uwsgi.ini # 啟動
uwsgi --reload uwsgi.pid # 重啟
uwsgi --stop uwsgi.pid # 關(guān)閉
#### 訪問
瀏覽器訪問 http://ip:8000/返回登錄頁面
后續(xù)就可以在此基礎(chǔ)上繼續(xù)試驗python了...
上一張F(tuán)lask:
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。