整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          自學一個月pyhon找到工作,半年成為多個平臺關注破

          自學一個月pyhon找到工作,半年成為多個平臺關注破萬的小作者

          貨來了,濃縮了我學習python的所有學習經歷,從中獲取到的經驗分享給你,如果你看了沒用,那讓我打你一拳。


          大學

          高中的我,考了三次高考才勉強考上一個二本大學一本數學專業,你沒聽錯,三次;就像俞敏洪和馬云一樣,我也算和兩位大佬有共同點了。

          由于這段經歷,在大學幾年時間,都還時常夢見自己又回到高中,經歷高六,然后直接半夜被嚇醒大一的時候,學習過一個學期的c語言,我相信大部分人都學過,期末考試過后就基本沒有再用過。大二參加過數學建模競賽,得過一些小獎,但基本沒什么卵用。參加過數學建模競賽的小伙伴應該都知道,主流使用SPSS、lingo等傻瓜式軟件,對編程基本沒屌用,matlab好一點,但是由于matlab封裝性很高,并且價格不菲,也就漸漸放棄了

          到大三開始,基本就屬于混的階段,每天與床伴平行,經常曠課,沒事就打游戲、泡妞、唱k、打望、反正沒務過正業。

          那段時間還沉迷于王者農藥,超級喜歡玩李白,還賊菜那種。

          我的英語四級連續考了7次,最高分403分。菜到這種程度,我自己都懷疑自己智商是不是有問題。這種英語水平做一個程序員都困難,很多資料、外國論壇事看不懂的。

          雖然程序員不需要多高的英語水平,但是,好的英語閱讀能力會真的會大大開闊你的眼界,提高你的職業上限,這也是我工作了一年后才漸漸明白的,悔啊!!!要是我能回到大一,一定會對那個無知的SB一巴掌,然后告誡他,"一定要好好學英語"。不過在這幾年大學日子,我到還沒有掛過科,唯一掛的就是入學考試,對,就是那個一進校門就要背的規章制度,我真的是嗶了哈士奇了。

          由于我喜歡數學,數學基礎不差,很多數學課程隨便學兩下,就算一學期沒上過幾次課,考試都是高分通過。

          哈哈,這也是我大學唯一值得自豪的事了,證明我還不是一無是處,完完全全混吃等死。這樣渾渾噩噩過了一年多,到了大四上半年,班上成績好的同學,保研的保研,考研的也考完了,就在等著好消息。

          而我呢,其實也參加了考研,但是,最后一門考試快結束的時候,我的耳邊響起了一首《涼涼》的鐘聲。直到畢業,我都沒看一眼考研成績。



          實習

          大概在畢業那一年的四月份初,我找到了一份實習工作,公司很小,一共就10個人左右,主要基于android做游戲開發。

          那個老板人特別好,對我也是非常有耐心,手把手教我計算機的知識。盡管像他這么有耐心的老板,依然被我的蠢折服了,他給我說命令行,我一臉呆萌的問,命令行是啥東西;還有,我連windows的文件結構,文件目錄都搞不太清楚。

          實習期間,我并沒有做有關游戲的工作,而是學習python、學習機器學習的有關理論。主要原因是老板要求我學這個,他也想蹭蹭AI的熱度,想轉行做人工智能相關的東西。盡管當他給我說深度學習的時候,我連這是個什么鬼都不知道。

          在那里我待了一個半月的時間,完全自學了python基礎、tensorflow、自學了機器學習的一些理論,手推了反向傳播、支持向量機、決策樹、卷積神經網絡等算法。也在github上找了一些開源項目,學習一下別人的代碼。

          五月中旬我回到學校寫畢業論文,也就那樣,網上抄些東西修修改改,剩下的就是浪了。直到7月初畢業答辯結束,滾出了學校。

          我是一直想到一線城市去的,沒辦法,由于學編程沒多久,學得不精,也沒能力、更沒有勇氣義無反顧的走出去。要知道,向我這種普通大學的數學本科畢業是很尷尬的,當老師吧,只能去農村,去企業吧,只會些理論知識,啥都干不了;去考公務員吧,我又不喜歡那種一眼能望到頭的生活。沒辦法,只能回到我實習的公司。

          在公司待了十多天時間,每天都在想著怎樣去廣州,去那邊找一份工作,但是對未來的恐懼讓我遲遲不敢行動。直到7月23號上午,我發小來了一個電話:

          發小:問你個事,我室友要辭職了,沒人跟我一起合租,你要不要來?

          我:嗯。。。。。。 我考慮一下,明天給你答復

          發小:要得,你想好了給我說

          當天,我的心情異常激動,但又極度擔憂。但我知道,這樣拖下去,我就永遠待在這里了。

          下午我編了一份簡歷,對,就是編的,然后就在前程無憂上投了大概有一百多份,反正廣撒網嘛。沒想到,陸陸續續就有好幾家公司給我打電話,叫我去廣州面試。這一下,我有了底氣,心里想著,好幾個面試,也許會有一個中吧。第二天上午就給我發小打電話說我馬上來廣州,下午就給老板辭職了。辭職后,回家待了一天,然后就坐飛機飛到了廣州。


          求職

          到廣州,我面試了大約有8家公司,沒有人要,我記得有一個hr語重心長的給我說了這樣一句話:“你的基礎不太好,但是你還年輕,還有很多時間去學習,報個培訓班、考個在職研究生也可以,加油,小伙子”

          當時心都涼了大半截,不過,這個hr給我的鼓勵讓我至今都記得這句話,不過,我沒接受他的建議去報一個培訓班,依然不停的投簡歷,面試。終于,找到了一家公司。面試過程大致是這樣的:

          剛到公司,hr給我了一套面試題,我記得一共有20多道題,而我,只做了兩道選擇題,還是那種邏輯稍微復雜點的if判斷題。時間到了,hr看了我的試卷,沒說啥,就開始問我的經歷我講了數學建模的經歷,實習的經歷,雖然我的編程能力不高,但數學基礎還算不錯,和hr聊的還比較愉快。然后,hr最后給我說了這樣一句話:

          “你這個試卷不能給人事看到,看到肯定就沒戲了”

          他把我試卷大卸八塊后扔進了垃圾桶。就這樣,我進了現在的公司,做有關機器學習的項目,比如人臉識別、智能客服、語音識別等。至今已經一年多了。


          現在

          目前我依然在這個公司,可能今年就會辭職了。從去年九月份開始,我經營自己的公眾號,不到半年時間公號關注量破萬破萬,知乎關注量破萬,頭條關注剛剛入駐,一天時間關注量破千,成為了一個自媒體小作者,寫寫文章,偶爾接點小廣告賺點零花錢,雖然不多,但已經非常開心了。




          總結:

          上面說了一大堆,看似和問題無關,其實是有很大的關系:

          1、如果你是非科班畢業想要轉行編程,看了我的經歷你一定很有信心與動力,高考三次、常年逃課、混吃等死的我都能,你一樣能。

          2、如果你完全零基礎,又不想去培訓,怕被割韭菜,那你可以參考一下我的經歷。

          3、如果你本身有一些數據結構、數學理論、或編程語言的基礎,你想學好編程,那你更應該有自信,因為你已經和那些非科班的人不在一個起跑線了,你只需要不斷地努力,堅持堅持再堅持,就行了。

          4、面試的時候,技術不一定需要非常非常好,特別是剛畢業的大學生,你只要有閃光點,能讓hr感受到,那還是很有希望的。


          怎么自學python

          現在是真正的干貨開始了我實習的時候,python完全零基礎,我看的第一個入門資料是一個視頻教程,我覺得非常不錯,分享給大家

          Python教程_600集Python從入門到精通教程

          網址:https://www.bilibili.com/video/av14184325from=search&seid=12319528533837151178


          我開始學python的時候,看過很多入門書籍,比如《菜鳥教程》、《本辦法學python》、《python編程從入門到實踐》,但是沒有一本是真正看完了的,基本都只看了五分之一不到。為什么呢,主要有兩點

          1、里面的有些東西講的并不基礎,比如我從來沒學過類,看到類那一章完全處于懵逼狀態,于是放棄了

          2、一本書太多了,如果哪個時候你忙其他事忘了,回頭來學發現,前面的忘得差不多了

          所以,看這類型python編程書對新手不太友好,盡管它說是入門書籍。

          這個視頻一共六百集,別看這么多,其實花不了多少時間,每一集也就5、6分鐘,很容易堅持看下去,就算你吃飯、排隊付錢、等公交、甚至拉個屎都能看一集。這樣一集一集,不斷形成正向反饋,你學的越來越有自信,越有自信越想學,你想想這是多么快樂的事情。并且這個老師講課風格很幽默,聽著會很輕松、也很基礎。

          一次性別看太多,一次看兩三集,每天多看幾次,定期上機練手就行了。相信我,我是這樣從零做到的,你也一定行。還有一點必須說明,這個視頻的前兩百集是linux基礎,你有興趣可以學,也可以不學,如果是完全的新手,建議你別看,并不影響后面的學習。


          關于搜索引擎

          真的,放棄百度吧,趕快用google,我遇到過太多次百度上找出一堆無關緊要的廢話答案,而在google第一個答案就是我想要的情況。好的搜索引擎,會大大提升你學習的效率,尤其是作為一個程序員。

          百度這種東西,只適合拿來搜索八卦新聞,不適合搜索學術、知識。

          當然拉,知乎也是一個找優質資源的途徑,比如你現在看到我的回答。

          這里我再推薦一下其他的視頻資料,也是非常好的,可以搭配看

          1、[小甲魚]零基礎入門學習Python

          網址:https://www.bilibili.com/video/av4050443?from=search&seid=3592529169870904984

          2、【python教程】數據分析——numpy、pandas、matplotlib

          網址:https://www.bilibili.com/video/av57023791?from=search&seid=3592529169870904984


          還要著重提醒一下大家,學到一定階段過后,一定要注意看官方文檔,百度搜到的很多知識真的很垃圾,這種時候在百度上花費太多時間簡直是暴殄天物,貼上官方文檔地址:

          https://www.python.org/

          官方文檔永遠是你最堅實的后盾,這上面包含了python的一切


          如果你不喜歡看視頻,這里有一些高質量的文檔分享給你:

          Vamei老師:【python快速教程】 https://www.cnblogs.com/vamei/archive/2012/09/13/2682778.html

          廖雪峰老師:【python教程】https://www.liaoxuefeng.com/wiki/897692888725344

          《笨辦法學 Python》:這本書絕對是最簡單的學習 Python 的方法,本書的 HTML 在線版是完全免費的。http://learnpythonthehardway.org/book/

          Python Weekly:每周更新,包括Python相關的文章、教程、演講、書籍、項目、工作等。http://www.pythonweekly.com/

          Python challenge:用Python編程技能解決33個謎題,闖關。http://www.pythonchallenge.com/

          編程零基礎應當如何開始學習 Python ? - 知乎 https://www.zhihu.com/question/20039623

          Python 初學者的最佳學習資源 - Python - 伯樂在線 http://python.jobbole.com/82399/


          如果你已經學完了基礎,需要在特定的方向上有所提高,比如web、爬蟲,那我有一些資源給你:

          web項目練習

          web機器人:

          Python搭建的web接口聊天機器人-CSDN下載?download.csdn.net

          https://download.csdn.net/download/tobacco5648/9417643

          web實戰:

          https://github.com/michaelliao/awesome-python-webapp

          博客BBS論壇系統:

          Python之路【第十八篇】Django小項目簡單BBS論壇部分內容知識點 - Mr.心弦 - 博客園?https://www.cnblogs.com/luotianshuai/p/5331982.html

          成績管理系統:

          一個使用django開發的綜合成績管理系統 - 開源中國社區

          https://link.zhihu.com/?target=https%3A//www.oschina.net/code/snippet_209440_19482

          新聞系統:

          python項目練習四:新聞聚合 | the5fire的技術博客?

          https://www.the5fire.com/python-pro4-newsagent.html


          爬蟲項目練習

          爬取知乎:

          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


          如果你在特定方向學習的過程中,發現你的python基礎不牢固,需要進一步學習python,我推薦你看這本書:

          https://python3-cookbook.readthedocs.io/zh_CN/latest/c01/p13_sort_list_of_dicts_by_key.html


          毫不夸張的說,這是我看到的有關python進階最好的書了,名字叫python-cookbook,簡直良心作品。沒有之一。上面的所有代碼復制就能運行,非常方便調試。

          如果你看了我的推薦還是不滿足,那我這里我推薦一些其他好的博主:

          Python 有哪些好的學習資料或者博客?? https://www.zhihu.com/question/34907211


          你可以去看看這個答案,有比較詳細的介紹。

          我這里再推薦一個我非常喜歡的一個博主,文章都非常精辟:

          http://blog.konghy.cn/2016/06/23/python3-new-feature/


          最后


          python其實真的很好學習,入門也很簡單,刻苦一點,花一周時間,就算你完全是編程小白,入門也是完全沒問題的。你看看我,非科班,沒有經過任何培訓,高考考三次才勉強上一本的人,都能學會,你也一定能。

          但是,python想要學好真的不容易,需要你花大量的時間,刻苦專研,才能游刃有余


          “苦心人,天不負,臥薪嘗膽,三千越甲可吞吳”

          與諸君共勉

          程目錄

          當前網上優秀的Python入門類教程、網課數不勝數。我并不擅長寫入門教程,湊個熱鬧,僅以我個人入門Python的學習過程為線索,為大家推薦各個階段、知識點的優秀教程。

          首先推薦幾份優秀的入門教程:

          https://www.liaoxuefeng.com/wiki/1016959663602400 廖雪峰的教程

          https://docs.python.org/zh-cn/3/tutorial/ Python官方文檔提供的教程(雖然不太適合入門,但是非常適合當百科全書用)

          https://www.runoob.com/python3/python3-tutorial.html 菜鳥教程的Python3教程

          http://c.biancheng.net/python/base/ C語言中文網的教程

          下面是我個人學Python的過程總結及推薦教程。其中學習目標為該過程推薦理解、實現的內容;擴展知識為該學習階段涉及的更復雜應用,不需要在當前階段理解、實現。


          1.Python是什么?

          在學習一門編程語言之前,我們首先要了解它是什么,我們為什么要學它而不是學習其他的編程語言。雖然這個在短期內對學習沒什么影響,但是長期來看對學習還是挺有指導意義的,另外遇到程序猿也可以多點話題。

          廖雪峰Python教程:Python簡介

          https://www.liaoxuefeng.com/wiki/1016959663602400/1016959735620448

          Python官方文檔:課前甜點

          https://docs.python.org/zh-cn/3/tutorial/appetite.html

          根據我之前的“教學”體驗,編程語言的環境搭建大多都對初學者并不友好,出現一些特殊異常有可能直接勸退。所以個人推薦在學習最初先不必搭建環境,可以先用線上編輯器學習(在學習第三方模塊前都可以先用線上編輯器)。

          Python在線編輯器:好用的Python在線編輯器推薦

          Python環境搭建:Python+Pip開發環境安裝

          2.Python基礎語法

          首先,我們理解一些最基本的東西,包括如下內容:輸入和輸出、變量、數據類型、運算符。如果有其他編程語言的基礎,其實只需要了解一下輸入和輸出的函數即可。

          在學習的過程中,您可以嘗試實現以下練習:

          • 控制臺接收用戶輸入的兩個數,并將兩個數求和輸出

          (1)輸入和輸出

          學習目標:實現在控制臺輸出“Hello World”

          廖雪峰Python教程:輸入和輸出

          https://www.liaoxuefeng.com/wiki/1016959663602400/1017032074151456

          擴展知識:

          print()函數的詳細用法

          CSDN-TCatTime的博客:Python print()函數

          https://blog.csdn.net/TCatTime/article/details/83450692

          菜鳥教程:輸入和輸出(輸出格式美化)

          https://www.runoob.com/python3/python3-inputoutput.html

          (2)交互模式/命令行模式

          學習目標:理解Python的命令行模式和交互模式之間的區別,了解兩個模式的啟動方法

          博客園大魚biubiu博客:命令行模式和python交互模式

          https://www.cnblogs.com/zhanym/p/9984571.html

          (3)變量及數據類型

          學習目標:

          • 理解變量及變量的指向關系,了解變量的賦值和調用方法
          • 理解字符串、整數、浮點數、布爾值以及空值的含義

          廖雪峰Python教程:數據類型和變量

          https://www.liaoxuefeng.com/wiki/1016959663602400/1017063826246112

          擴展知識:

          ①字符串變量的詳細用法(建議在學習運算符后學習)

          菜鳥教程:字符串

          https://www.runoob.com/python3/python3-string.html

          ②數字變量的詳細用法(建議在學習運算符后學習)

          菜鳥教程:數字(Number)

          https://www.runoob.com/python3/python3-number.html

          (4)運算符

          學習目標:理解算術運算符、比較運算符、賦值運算符、邏輯運算符、成員運算符、身份運算符以及運算符優先級順序

          菜鳥教程:運算符

          https://www.runoob.com/python3/python3-basic-operators.html#ysf6

          各個運算符的詳細用法可以參見以下教程(邏輯運算符建議在學習條件判斷之后學習):

          C語言中文網:Python算術運算符

          http://c.biancheng.net/view/2183.html

          C語言中文網:Python賦值運算符

          http://c.biancheng.net/view/2182.html

          C語言中文網:Python比較運算符

          http://c.biancheng.net/view/4258.html

          C語言中文網:Python邏輯運算符

          http://c.biancheng.net/view/2186.html

          (5)列表 list / 元組 tuple / 集合 set / 字典 dict

          學習目標:列表、元組、集合、字典的定義、訪問、修改、刪除方法以及運算符;了解其函數和方法(建議在學習函數之后學習);了解其截取和拼接(建議在學習切片器之后學習)

          菜鳥教程:列表

          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

          3.基本程序流程

          接下來,我們需要了解控制程序基本運行流程的方法(就是把高中學的程序框圖在Python中實現出來),主要包括條件判斷和循環。

          在學習的過程中,您可以嘗試實現以下兩個練習:

          • 計算100以內所有質數
          • 計算第20位的斐波那契數列

          首先推薦完整講述程序流程的教程:

          Python官方文檔:其他流程控制工具(4.1-4.5)

          https://docs.python.org/zh-cn/3/tutorial/controlflow.html

          (1)條件判斷

          學習目標:掌握條件判斷語句寫法,建議實現推薦教程中BMI計算的練習

          廖雪峰Python教程:條件判斷

          https://www.liaoxuefeng.com/wiki/1016959663602400/1017099478626848

          (2)循環

          學習目標:掌握if和while的使用方法,了解break、continue和else子句

          菜鳥教程:循環語句

          https://www.runoob.com/python3/python3-loop.html

          練習的實現代碼

          菜鳥教程:獲取 100 以內的質數(方法一)

          https://www.runoob.com/python/python-get-prime-number.html

          CSDN-chenlunju的博客:python求斐波那契數列中第n個數的值(方法一)

          https://blog.csdn.net/chenlunju/article/details/85603662

          4.函數

          在掌握了基本語法和基本程序流程后,其實已經基本上可以實現出大部分想要實現的內容了,但是此時的程序會包含很多重復;而函數就是用來精簡程序,提高程序可讀性的有效方法。在這個階段,我們需要掌握定義函數、調用函數、函數參數,并對遞歸函數的使用方法略作了解。

          在學習的過程中,您可以嘗試實現以下練習:

          • 定義一個計算第n位斐波那契數列的函數并調用它

          (1)什么是函數?

          首先,我們需要理解什么是函數,函數是用來干什么的。在理解計算機函數時,可以借助數學函數和Excel的函數來輔助理解。

          百度知道:什么是計算機函數?(第二個回答)

          https://zhidao.baidu.com/question/168286141.html

          廖雪峰Python教程:函數

          https://www.liaoxuefeng.com/wiki/1016959663602400/1017105145133280

          (2)定義、調用函數

          學習目標:熟練掌握調用Python內置函數、定義函數并調用定義的函數的方法

          ①調用Python內置的函數

          廖雪峰Python教程:調用函數

          https://www.liaoxuefeng.com/wiki/1016959663602400/1017105451316128

          ②定義并調用定義的函數

          廖雪峰Python教程:定義函數

          https://www.liaoxuefeng.com/wiki/1016959663602400/1017106984190464

          Python官方文檔:定義函數(4.6)

          https://docs.python.org/zh-cn/3/tutorial/controlflow.html#defining-functions

          (3)函數的參數

          學習目標:掌握函數的普通參數(位置參數)、默認參數(a=None)、可變參數(*)、關鍵詞參數(**)的用法,了解強制位置參數(/)的用法

          廖雪峰Python教程:函數的參數

          https://www.liaoxuefeng.com/wiki/1016959663602400/1017261630425888

          (4)遞歸函數

          學習目標:簡單了解遞歸函數的用法

          廖雪峰Python教程:遞歸函數

          https://www.liaoxuefeng.com/wiki/1016959663602400/1017268131039072

          5.高級特性

          以下高級特性除切片器以外,在現階段只需要大致了解即可,只要在用的時候能夠想起可能有一種更優解即可。這里我選擇了幾個我在剛入門時比較常用的特性(可以和我應用場景相關),推薦了相關教程。建議大家學習一下廖雪峰的Python教程中對于高級特性的講解,包括高級特性和函數式編程(函數高級特性)兩個部分。

          (1)切片器

          廖雪峰Python教程:切片器

          https://www.liaoxuefeng.com/wiki/1016959663602400/1017269965565856

          (2)裝飾器

          博客園-菩提樹下的楊過的博客:python:函數的高級特性(三、裝飾器)

          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)偏函數

          廖雪峰Python教程:偏函數

          https://www.liaoxuefeng.com/wiki/1016959663602400/1017454145929440

          博客園-菩提樹下的楊過的博客:python:函數的高級特性(四、偏函數)

          https://www.cnblogs.com/yjmyzz/p/advanced-feature-of-python-function.html

          6.模塊

          熟悉了函數和高級特性之后,基本上就已經掌握了語言的基礎,可以實現一些小功能了。但是,很多功能我們仍然無法實現,或者實現起來非常麻煩,例如讀寫文件、讀取系統時間等等,這時候我們就需要引入Python的內置模塊和一些第三方模塊了。同樣,當我們的程序代碼越寫越多的時候,我們也需要將我們的代碼整理到不同的.py文件中,使用模塊維護。

          在學習的過程中,您可以嘗試實現以下練習:

          • 生成并輸出一個1-100之間的隨機數 / 讀取并輸出當前系統時間
          • 定義一個模塊并調用它

          (1)定義及調用模塊

          菜鳥教程:模塊(“深入模塊”之前的部分)

          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導入的模塊名;如果安裝失敗,百度模塊名,看看是不是模塊名錯誤或者存在其他錯誤;如果仍然安裝失敗,自行下載適合自己的安裝包版本,本地安裝。如果本地有多個Python環境,注意模塊包安裝在了哪個Python環境下。

          ①pip安裝

          博客園-miaoning的博客:python如何安裝第三方模塊(方法一)

          https://www.cnblogs.com/miaoning/p/10910972.html

          ②自行下載模塊包安裝

          博客園-楓子的博客:安裝Python第三方模塊

          https://www.cnblogs.com/fengzzi/p/10040669.html

          (3)常用模塊

          Python標準庫

          https://docs.python.org/zh-cn/3/library/index.html

          Python官方文檔模塊文檔地址

          https://docs.python.org/zh-cn/3/library/{模塊名}.html

          以下常用模塊不需要了解它們所有的具體功能,但需要知道一些常用功能可以通過什么模塊實現,在使用時再具體學習對應模塊的用法。

          • sys —— Python系統相關的參數和函數(Python安裝路徑、Python系統設置……)
          • os —— 操作系統接口(讀取文件列表、讀取環境變量、讀取進程、讀取系統換行符……)
          • random —— 偽隨機數生成器(生成隨機數)
          • time —— 時間相關函數(讀取當前時間、讀取當前時區、暫停程序……)
          • json —— Json編碼器和解碼器(解析Json字符串)
          • re —— 正則表達式操作(利用正則表達式匹配、替換字符串……)

          7.面對對象

          因為我個人在學Python前主要是用Java,而Java是完全面對對象的語言,所以我在學Python的過程中沒有理解對象的過程。我只能推薦幾份教程,但是否適合于初學者理解對象并不能確定。

          廖雪峰Python教程:面對對象編程

          https://www.liaoxuefeng.com/wiki/1016959663602400/1017495723838528

          菜鳥教程:面對對象

          https://www.runoob.com/python3/python3-class.html


          作者:長行 (Python系列教程:A001)

          ython學習思路

          - 最近因工作需要學習python
          - 學習資料:
            - 菜鳥Python3教程https://www.runoob.com/python3/python3-tutorial.html
            - 廖雪峰Python博客https://www.liaoxuefeng.com/wiki/1016959663602400/
            - 以菜鳥為主,廖雪峰補充
          - 學習耗時:先花3天左右將菜鳥教程從頭到尾過一遍
            - 了解基本環境、語法、庫
            - 了解教程的目錄章節結構,知道需要的知識去哪一章查詢
          - 動手實踐:
            - 對于有編程經驗來說python上手還是非常簡單的
            - 但技術細節是過眼煙云
            - 最好的辦法是使用他寫一個小系統,持續迭代,后續只需查閱之前用法即可
            - 本文的后面部分就是使用Flask框架來搭建、部署一個簡單web應用

          Flask簡介

          - 官方文檔https://dormousehole.readthedocs.io/en/latest/index.html
          - Flask為python語言的輕量級web框架
          - Flask vs Django
            - Django大而全
            - Flask更偏向提供輕量級api服務

          Flask安裝

          # 切換python虛擬環境為pyspark
          conda activate pyspark
          
          # 安裝Flask
          pip install Flask
          
          # 檢查Flask版本
          >>> import flask
          >>> flask.__version__
          '2.1.2'

          Flask應用app.py編寫

          • 創建項目目錄pytools
          • pytools/app.py:
          # 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__)
          
          # 秘鑰設置
          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':
                  # 模擬登陸成功設置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'))
          
          # 接口路徑參數、查詢參數、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頁面設置
          @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

           /* 無內容 */

          開發環境運行Flask應用

          方式一:使用flask運行

          # 切換到app.py目錄
          cd pytools 
          
          #設置環境變量FLASK_APP
          export FLASK_APP=app #不設置默認為app
          
          #運行
          flask run
          
          運行結果:
           * 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)
          
          注意: 此種方式不會執行__name__=='__main__'的內容

          方式二:使用python運行

          # 通過python -m app 或 python app.py 
          
          # 切換到app.py目錄
          cd pytools
          
          #python -m app
          python app.py
          
          運行結果:
          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)
          
          通過運行輸出日志可見LISTEN PORT為8080
          
          注意: 此種方式會執行__name__=='__main__'的內容

          uWSGI服務器安裝

          uwsgi官方文檔: https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html
          
          # 切換到使用的python虛擬環境(我這里是pyspark)
          conda activate pyspark
          
          # 通過pip安裝uwsgi
          pip install uwsgi
          # 報錯找不到libpython3.9.a
          #=> 是因為python覺得python.xx.a文件大家日常使用較少,所以在新版本中默認不生成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  
          
          #進入源碼目錄
          cd Python-3.9.12 
          
          #編譯器配置安裝目錄
          ./configure --prefix=/tmp/python3.9.12 
          
          #注意不要帶上--enable-optimizations參數,會導致gcc版本問題
          #./configure --prefix=/tmp/python3.9.12 --enable-optimizations
          
          #編譯
          make 
          
          #安裝,會安裝在之前設置的/tmp/python3.9.12目錄
          make install 
          
          #進入安裝目錄
          cd /tmp/python3.9.12 
          
          # 復制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/
          
          # 重新執行uwsgi安裝
          pip install uwsgi
          #繼續報錯: collect2: error: ld returned 1 exit status
          #類似問題是gcc或依賴庫版本不兼容導致
          #查詢資料后給出解決辦法是使用conda來安裝uwsgi
          conda install uwsgi
          #使用conda安裝還是失敗,查詢資料后還是依賴的庫或版本不兼容導致
          #給出解決辦法是設置conda的channel(類似maven倉庫源)
          #然后更新conda
          #然后重新安裝
          #conda channel具體可參考https://www.jianshu.com/p/eba58694537b
          
          #設置channel為conda-forge
          conda config --add channels conda-forge
          
          #查看當前channels
          conda config --get channels
          
          # 安裝conda
          conda install conda
          
          # 更新conda
          conda update conda
          
          # 重新安裝uwsgi
          conda install uwsgi
          安裝成功
          
          #查看uwsgi版本
          uwsgi --version
          2.0.20
          
          #查看uwsgi對應python版本
          uwsgi --python-version
          3.9.12

          創建uwsgi應用配置文件config.ini

          pytools/config.ini

          #在項目根目錄(pytools)創建配置文件config.ini
          
          [uwsgi]
          master=true
          
          #python代碼熱更新
          py-autoreload=1
          
          #uwsgi啟動時,所使用的地址和端口(這個是http協議的)
          http=0.0.0.0:8000
          
          #指向網站目錄
          chdir=/home/dev/test/pyspark/pytools
          
          #python 啟動程序文件
          wsgi-file=app.py
          
          #python 程序內用以啟動的application 變量名
          callable=app
          
          #處理器數
          processes=4
          
          #線程數
          threads=2
          
          uid=dev
          gid=dev
          
          # uwsgi的進程名稱前綴
          procname-prefix-spaced=etd 
          
          # 退出uwsgi是否清理中間文件,包含pid、sock和status文件
          vacuum=true 
          
          # socket文件,配置nginx時候使用
          # socket=%(chdir)/uwsgi/uwsgi.sock
          # status文件,可以查看uwsgi的運行狀態
          #stats=%(chdir)/uwsgi/uwsgi.status 
          # pid文件,通過該文件可以控制uwsgi的重啟和停止
          pidfile=%(chdir)/uwsgi/uwsgi.pid 
          # 日志文件,通過該文件查看uwsgi的日志
          daemonize=%(chdir)/uwsgi/uwsgi.log 

          生產運行

          #進入項目根目錄
          cd pytools
          
          #創建uwsgi目錄
          mkdir uwsgi
          
          #啟動
          uwsgi config.ini 
          [uWSGI] getting INI configuration from config.ini
          
          #查看進程
          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 # 關閉

          訪問

          #### 訪問
          瀏覽器訪問 http://ip:8000/返回登錄頁面



          后續就可以在此基礎上繼續試驗python了...

          上一張Flask:


          主站蜘蛛池模板: 久久一区二区三区精华液使用方法| 中文乱码字幕高清一区二区| 无码人妻精品一区二区蜜桃| 久久精品无码一区二区三区日韩| 久久精品一区二区三区AV| 亚洲高清成人一区二区三区| 末成年女AV片一区二区| 国精品无码一区二区三区在线| 一区二区三区免费视频观看| 波多野结衣一区二区免费视频| 精品一区二区三人妻视频| 99久久精品午夜一区二区| 日韩精品无码中文字幕一区二区| 日本精品一区二区三区在线观看| 国产av天堂一区二区三区| 亚洲综合国产一区二区三区| 在线精品动漫一区二区无广告| 久久影院亚洲一区| 久久国产香蕉一区精品| 成人免费av一区二区三区| 99久久精品国产高清一区二区| 丰满人妻一区二区三区免费视频 | 夜夜高潮夜夜爽夜夜爱爱一区| 91精品福利一区二区| 精品国产a∨无码一区二区三区| 日本伊人精品一区二区三区| 精品无码人妻一区二区免费蜜桃 | 亚洲天堂一区在线| 精品国产a∨无码一区二区三区| 一本一道波多野结衣一区| 亚洲A∨精品一区二区三区下载| 一区二区三区精密机械| 国产日韩视频一区| 国产成人精品一区二三区在线观看| www.亚洲一区| 高清国产AV一区二区三区| 亚洲国产成人久久综合一区| 99热门精品一区二区三区无码 | 国产一区视频在线| 亚洲午夜在线一区| 国产萌白酱在线一区二区|