學習Python的day1

来源:http://www.cnblogs.com/zhaohongtaodepython/archive/2017/09/16/7533181.html
-Advertisement-
Play Games

自己以前從來沒有寫博客的想法,但是學Python,裡面的老師也說了,寫博客可以加深自己的記憶,也能回顧內容。還能給別人參考。挺值的。2017-09-16 一、 Python介紹 python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆為了在阿姆 ...


自己以前從來沒有寫博客的想法,但是學Python,裡面的老師也說了,寫博客可以加深自己的記憶,也能回顧內容。還能給別人參考。挺值的。2017-09-16

一、 Python介紹

python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程式,作為ABC語言的一種繼承。  

最新的TIOBE排行榜,Python趕超PHP占據第五, Python崇尚優美、清晰、簡單,是一個優秀並廣泛使用的語言。

 

Python可以應用於眾多領域,如:數據分析、組件集成、網路服務、圖像處理、數值計算和科學計算等眾多領域。目前業內幾乎所有大中型互聯網企業都在使用Python,如:Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、騰訊、汽車之家、美團等。

 

目前Python主要應用領域:

 

  • 雲計算: 雲計算最火的語言, 典型應用OpenStack
  • WEB開發: 眾多優秀的WEB框架,眾多大型網站均為Python開發,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
  • 科學運算、人工智慧: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas
  • 系統運維: 運維人員必備語言
  • 金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作為動態語言的Python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛逼,生產效率遠遠高於c,c++,java,尤其擅長策略回測
  • 圖形GUI: PyQT, WxPython,TkInter

 

Python在一些公司的應用: 

 

  • 谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬蟲、Google廣告等項目都在大量使用Python開發
  • CIA: 美國中情局網站就是用Python開發的
  • NASA: 美國航天局(NASA)大量使用Python進行數據分析和運算
  • YouTube:世界上最大的視頻網站YouTube就是用Python開發的
  • Dropbox:美國最大的線上雲存儲網站,全部用Python實現,每天網站處理10億個文件的上傳和下載
  • Instagram:美國最大的圖片分享社交網站,每天超過3千萬張照片被分享,全部用python開發
  • Facebook:大量的基礎庫均通過Python實現的
  • Redhat: 世界上最流行的Linux發行版本中的yum包管理工具就是用python開發的
  • 豆瓣: 公司幾乎所有的業務均是通過Python開發的
  • 知乎: 國內最大的問答社區,通過Python開發(國外Quora)
  • 春雨醫生:國內知名的線上醫療網站是用Python開發的

除上面之外,還有搜狐、金山、騰訊、盛大、網易、百度、阿裡、淘寶 、土豆、新浪、果殼等公司都在使用Python完成各種各樣的任務。

 

Python 是一門什麼樣的語言?

 

編程語言主要從以下幾個角度為進行分類,編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言,每個分類代表什麼意思呢,我們一起來看一下。

 

編譯和解釋的區別是什麼?

 

編譯器是把源程式的每一條語句都編譯成機器語言,並保存成二進位文件,這樣運行時電腦可以直接以機器語言來運行此程式,速度很快; 

 

解釋器則是只在執行程式時,才一條一條的解釋成機器語言給電腦來執行,所以運行速度是不如編譯後的程式運行的快的. 

 

這是因為電腦不能直接認識並執行我們寫的語句,它只能認識機器語言(是二進位的形式)

編譯型vs解釋型

編譯型
優點:編譯器一般會有預編譯的過程對代碼進行優化。因為編譯只做一次,運行時不需要編譯,所以編譯型語言的程式執行效率高。可以脫離語言環境獨立運行。
缺點:編譯之後如果需要修改就需要整個模塊重新編譯。編譯的時候根據對應的運行環境生成機器碼,不同的操作系統之間移植就會有問題,需要根據運行的操作系統環境編譯不同的可執行文件。

解釋型
優點:有良好的平臺相容性,在任何環境中都可以運行,前提是安裝瞭解釋器(虛擬機)。靈活,修改代碼的時候直接修改就可以,可以快速部署,不用停機維護。

缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。

一、低級語言與高級語言

最初的電腦程式都是用01的序列表示的,程式員直接使用的是機器指令,無需翻譯,從紙帶打孔輸入即可執行得到結果。後來為了方便記憶,就將用01序列表示的機器指令都用符號助記,這些與機器指令一一對應的助記符就成了彙編指令,從而誕生了彙編語言。無論是機器指令還是彙編指令都是面向機器的,統稱為低級語言。因為是針對特定機器的機器指令的助記符,所以彙編語言是無法獨立於機器(特定的CPU體繫結構)的。但彙編語言也是要經過翻譯成機器指令才能執行的,所以也有將運行在一種機器上的彙編語言翻譯成運行在另一種機器上的機器指令的方法,那就是交叉彙編技術。

高級語言是從人類的邏輯思維角度出發的電腦語言,抽象程度大大提高,需要經過編譯成特定機器上的目標代碼才能執行,一條高級語言的語句往往需要若幹條機器指令來完成。高級語言獨立於機器的特性是靠編譯器為不同機器生成不同的目標代碼(或機器指令)來實現的。那具體的說,要將高級語言編譯到什麼程度呢,這又跟編譯的技術有關了,既可以編譯成直接可執行的目標代碼,也可以編譯成一種中間表示,然後拿到不同的機器和系統上去執行,這種情況通常又需要支撐環境,比如解釋器或虛擬機的支持,Java程式編譯成bytecode,再由不同平臺上的虛擬機執行就是很好的例子。所以,說高級語言不依賴於機器,是指在不同的機器或平臺上高級語言的程式本身不變,而通過編譯器編譯得到的目標代碼去適應不同的機器。從這個意義上來說,通過交叉彙編,一些彙編程式也可以獲得不同機器之間的可移植性,但這種途徑獲得的移植性遠遠不如高級語言來的方便和實用性大。


二、編譯與解釋

編譯是將源程式翻譯成可執行的目標代碼,翻譯與執行是分開的;而解釋是對源程式的翻譯與執行一次性完成,不生成可存儲的目標代碼。這隻是表象,二者背後的最大區別是:對解釋執行而言,程式運行時的控制權在解釋器而不在用戶程式;對編譯執行而言,運行時的控制權在用戶程式。

解釋具有良好的動態特性和可移植性,比如在解釋執行時可以動態改變變數的類型、對程式進行修改以及在程式中插入良好的調試診斷信息等,而將解釋器移植到不同的系統上,則程式不用改動就可以在移植瞭解釋器的系統上運行。同時解釋器也有很大的缺點,比如執行效率低,占用空間大,因為不僅要給用戶程式分配空間,解釋器本身也占用了寶貴的系統資源。

編譯器是把源程式的每一條語句都編譯成機器語言,並保存成二進位文件,這樣運行時電腦可以直接以機器語言來運行此程式,速度很快;
而解釋器則是只在執行程式時,才一條一條的解釋成機器語言給電腦來執行,所以運行速度是不如編譯後的程式運行的快的.

 

編譯型和解釋型
我們先看看編譯型,其實它和彙編語言是一樣的:也是有一個負責翻譯的程式來對我們的源代碼進行轉換,生成相對應的可執行代碼。這個過程說得專業一點,就稱為編譯(Compile),而負責編譯的程式自然就稱為編譯器(Compiler)。如果我們寫的程式代碼都包含在一個源文件中,那麼通常編譯之後就會直接生成一個可執行文件,我們就可以直接運行了。但對於一個比較複雜的項目,為了方便管理,我們通常把代碼分散在各個源文件中,作為不同的模塊來組織。這時編譯各個文件時就會生成目標文件(Object   file)而不是前面說的可執行文件。一般一個源文件的編譯都會對應一個目標文件。這些目標文件里的內容基本上已經是可執行代碼了,但由於只是整個項目的一部分,所以我們還不能直接運行。待所有的源文件的編譯都大功告成,我們就可以最後把這些半成品的目標文件打包成一個可執行文件了,這個工作由另一個程式負責完成,由於此過程好像是把包含可執行代碼的目標文件連接裝配起來,所以又稱為鏈接(Link),而負責鏈接的程式就叫……就叫鏈接程式(Linker)。鏈接程式除了鏈接目標文件外,可能還有各種資源,像圖標文件啊、聲音文件啊什麼的,還要負責去除目標文件之間的冗餘重覆代碼,等等,所以……也是挺累的。鏈接完成之後,一般就可以得到我們想要的可執行文件了。 

上面我們大概地介紹了編譯型語言的特點,現在再看看解釋型。噢,從字面上看,編譯解釋的確都有翻譯的意思,它們的區別則在於翻譯的時機安排不大一樣。打個比方:假如你打算閱讀一本外文書,而你不知道這門外語,那麼你可以找一名翻譯,給他足夠的時間讓他從頭到尾把整本書翻譯好,然後把書的母語版交給你閱讀;或者,你也立刻讓這名翻譯輔助你閱讀,讓他一句一句給你翻譯,如果你想往回看某個章節,他也得重新給你翻譯。 

兩種方式,前者就相當於我們剛纔所說的編譯型:一次把所有的代碼轉換成機器語言,然後寫成可執行文件;而後者就相當於我們要說的解釋型:在程式運行的前一刻,還只有源程式而沒有可執行程式;而程式每執行到源程式的某一條指令,則會有一個稱之為解釋程式的外殼程式將源代碼轉換成二進位代碼以供執行,總言之,就是不斷地解釋、執行、解釋、執行……所以,解釋型程式是離不開解釋程式的。像早期的BASIC就是一門經典的解釋型語言,要執行BASIC程式,就得進入BASIC環境,然後才能載入程式源文件、運行。解釋型程式中,由於程式總是以源代碼的形式出現,因此只要有相應的解釋器,移植幾乎不成問題。編譯型程式雖然源代碼也可以移植,但前提是必須針對不同的系統分別進行編譯,對於複雜的工程來說,的確是一件不小的時間消耗,況且很可能一些細節的地方還是要修改源代碼。而且,解釋型程式省卻了編譯的步驟,修改調試也非常方便,編輯完畢之後即可立即運行,不必像編譯型程式一樣每次進行小小改動都要耐心等待漫長的Compiling…Linking…這樣的編譯鏈接過程。不過凡事有利有弊,由於解釋型程式是將編譯的過程放到執行過程中,這就決定瞭解釋型程式註定要比編譯型慢上一大截,像幾百倍的速度差距也是不足為奇的。 

編譯型與解釋型,兩者各有利弊。前者由於程式執行速度快,同等條件下對系統要求較低,因此像開發操作系統、大型應用程式、資料庫系統等時都採用它,像C/C++Pascal/Object   PascalDelphi)、VB等基本都可視為編譯語言,而一些網頁腳本、伺服器腳本及輔助開發介面這樣的對速度要求不高、對不同系統平臺間的相容性有一定要求的程式則通常使用解釋性語言,如JavaJavaScriptVBScriptPerlPython等等。 

但既然編譯型與解釋型各有優缺點又相互對立,所以一批新興的語言都有把兩者折衷起來的趨勢,例如Java語言雖然比較接近解釋型語言的特征,但在執行之前已經預先進行一次預編譯,生成的代碼是介於機器碼和Java源代碼之間的中介代碼,運行的時候則由JVMJava的虛擬機平臺,可視為解釋器)解釋執行。它既保留了源代碼的高抽象、可移植的特點,又已經完成了對源代碼的大部分預編譯工作,所以執行起來比純解釋型程式要快許多。而像VB6(或者以前版本)、C#這樣的語言,雖然錶面上看生成的是.exe可執行程式文件,但VB6編譯之後實際生成的也是一種中介碼,只不過編譯器在前面安插了一段自動調用某個外部解釋器的代碼(該解釋程式獨立於用戶編寫的程式,存放於系統的某個DLL文件中,所有以VB6編譯生成的可執行程式都要用到它),以解釋執行實際的程式體。C#(以及其它.net的語言編譯器)則是生成.net目標代碼,實際執行時則由.net解釋系統(就像JVM一樣,也是一個虛擬機平臺)進行執行。當然.net目標代碼已經相當低級,比較接近機器語言了,所以仍將其視為編譯語言,而且其可移植程度也沒有Java號稱的這麼強大,Java號稱是一次編譯,到處執行,而.net則是一次編碼,到處編譯。呵呵,當然這些都是題外話了。總之,隨著設計技術與硬體的不斷發展,編譯型與解釋型兩種方式的界限正在不斷變得模糊。

動態語言和靜態語言
通常我們所說的動態語言、靜態語言是指動態類型語言和靜態類型語言。

1)動態類型語言:動態類型語言是指在運行期間才去做數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變數指定數據類型,該語言會在你第一次賦值給變數時,在內部將數據類型記錄下來。PythonRuby就是一種典型的動態類型語言,其他的各種腳本語言如VBScript也多少屬於動態類型語言。

2)靜態類型語言:靜態類型語言與動態類型語言剛好相反,它的數據類型是在編譯其間檢查的,也就是說在寫程式時要聲明所有變數的數據類型,C/C++是靜態類型語言的典型代表,其他的靜態類型語言還有C#JAVA等。

 

強類型定義語言和弱類型定義語言

1)強類型定義語言:強制數據類型定義的語言。也就是說,一旦一個變數被指定了某個數據類型,如果不經過強制轉換,那麼它就永遠是這個數據類型了。舉個例子:如果你定義了一個整型變數a,那麼程式根本不可能將a當作字元串類型處理。強類型定義語言是類型安全的語言。

2)弱類型定義語言:數據類型可以被忽略的語言。它與強類型定義語言相反, 一個變數可以賦不同數據類型的值。

強類型定義語言在速度上可能略遜色於弱類型定義語言,但是強類型定義語言帶來的嚴謹性能夠有效的避免許多錯誤。另外,這門語言是不是動態語言這門語言是否類型安全之間是完全沒有聯繫的!
例如:Python是動態語言,是強類型定義語言(類型安全的語言); VBScript是動態語言,是弱類型定義語言(類型不安全的語言); JAVA是靜態語言,是強類型定義語言(類型安全的語言)。

 

通過上面這些介紹,我們可以得出,python是一門動態解釋性的強類型定義語言。那這些基因使成就了Python的哪些優缺點呢?我們繼續往下看。

 

Python的優缺點

先看優點

  1. Python的定位是“優雅”、“明確”、“簡單”,所以Python程式看上去總是簡單易懂,初學者學Python,不但入門容易,而且將來深入下去,可以編寫那些非常非常複雜的程式。
  2. 開發效率非常高,Python有非常強大的第三方庫,基本上你想通過電腦實現任何功能,Python官方庫里都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上再進行開發,大大降低開發周期,避免重覆造輪子。
  3. 高級語言————當你用Python語言編寫程式的時候,你無需考慮諸如如何管理你的程式使用的記憶體一類的底層細節
  4. 可移植性————由於它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工 作在不同平臺上)。如果你小心地避免使用依賴於系統的特性,那麼你的所有Python程式無需修改就幾乎可以在市場上所有的系統平臺上運行
  5. 可擴展性————如果你需要你的一段關鍵代碼運行得更快或者希望某些演算法不公開,你可以把你的部分程式用C或C++編寫,然後在你的Python程式中使用它們。
  6. 可嵌入性————你可以把Python嵌入你的C/C++程式,從而向你的程式用戶提供腳本功能。

再看缺點:

  1. 速度慢,Python 的運行速度相比C語言確實慢很多,跟JAVA相比也要慢一些,因此這也是很多所謂的大牛不屑於使用Python的主要原因,但其實這裡所指的運行速度慢在大多數情況下用戶是無法直接感知到的,必須藉助測試工具才能體現出來,比如你用C運一個程式花了0.1s,用Python是0.01s,這樣C語言直接比Python快了10倍,算是非常誇張了,但是你是無法直接通過肉眼感知的,因為一個正常人所能感知的時間最小單位是0.15-0.4s左右,哈哈。其實在大多數情況下Python已經完全可以滿足你對程式速度的要求,除非你要寫對速度要求極高的搜索引擎等,這種情況下,當然還是建議你用C去實現的。
  2. 代碼不能加密,因為PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認為這算是一個缺點,如果你的項目要求源代碼必須是加密的,那你一開始就不應該用Python來去實現。
  3. 線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global Interpreter Lock),是電腦程式設計語言解釋器用於同步線程的工具,使得任何時刻僅有一個線程在執行,Python的線程是操作系統的原生線程。在Linux上為pthread,在Windows上為Win thread,完全由操作系統調度線程的執行。一個python解釋器進程內有一條主線程,以及多條用戶程式的執行線程。即使在多核CPU平臺上,由於GIL的存在,所以禁止多線程的並行執行。關於這個問題的折衷解決方法,我們在以後線程和進程章節里再進行詳細探討。

 

Python解釋器

當我們編寫Python代碼時,我們得到的是一個包含Python代碼的以.py為擴展名的文本文件。要運行代碼,就需要Python解釋器去執行.py文件。

由於整個Python語言從規範到解釋器都是開源的,所以理論上,只要水平夠高,任何人都可以編寫Python解釋器來執行Python代碼(當然難度很大)。事實上,確實存在多種Python解釋器。

CPython

當我們從Python官方網站下載並安裝好Python 2.7後,我們就直接獲得了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,所以叫CPython。在命令行下運行python就是啟動CPython解釋器。

CPython是使用最廣的Python解釋器。教程的所有代碼也都在CPython下執行。

IPython

IPython是基於CPython之上的一個互動式解釋器,也就是說,IPython只是在交互方式上有所增強,但是執行Python代碼的功能和CPython是完全一樣的。好比很多國產瀏覽器雖然外觀不同,但內核其實都是調用了IE。

CPython用>>>作為提示符,而IPython用In [序號]:作為提示符。

PyPy

PyPy是另一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(註意不是解釋),所以可以顯著提高Python代碼的執行速度。

絕大部分Python代碼都可以在PyPy下運行,但是PyPy和CPython有一些是不同的,這就導致相同的Python代碼在兩種解釋器下執行可能會有不同的結果。如果你的代碼要放到PyPy下執行,就需要瞭解PyPy和CPython的不同點。(這個比運行起來比JAVA快,有可能快過C)

Jython

Jython是運行在Java平臺上的Python解釋器,可以直接把Python代碼編譯成Java位元組碼執行。

IronPython

IronPython和Jython類似,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,可以直接把Python代碼編譯成.Net的位元組碼。

小結

Python的解釋器很多,但使用最廣泛的還是CPython。如果要和Java或.Net平臺交互,最好的辦法不是用Jython或IronPython,而是通過網路調用來交互,確保各程式之間的獨立性。

二、Python發展史 

  • 1989年,為了打發聖誕節假期,Guido開始寫Python語言的編譯器。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他希望這個新的叫做Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。
  • 1991年,第一個Python編譯器誕生。它是用C語言實現的,並能夠調用C語言的庫文件。從一齣生,Python已經具有了:類,函數,異常處理,包含表和詞典在內的核心數據類型,以及模塊為基礎的拓展系統。
  • Granddaddy of Python web frameworks, Zope 1 was released in 1999
  • Python 1.0 - January 1994 增加了 lambdamapfilter and reduce.
  • Python 2.0 - October 16, 2000,加入了記憶體回收機制,構成了現在Python語言框架的基礎
  • Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 誕生
  • Python 2.5 - September 19, 2006
  • Python 2.6 - October 1, 2008
  • Python 2.7 - July 3, 2010
  • In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
  • Python 3.0 - December 3, 2008
  • Python 3.1 - June 27, 2009
  • Python 3.2 - February 20, 2011
  • Python 3.3 - September 29, 2012
  • Python 3.4 - March 16, 2014
  • Python 3.5 - September 13, 2015

三、Python 2 or 3?

In summary : Python 2.x is legacy, Python 3.x is the present and future of the language

Python 3.0 was released in 2008. The final 2.x version 2.7 release came out in mid-2010, with a statement of

extended support for this end-of-life release. The 2.x branch will see no new major releases after that. 3.x is

under active development and has already seen over five years of stable releases, including version 3.3 in 2012,

3.4 in 2014, and 3.5 in 2015. This means that all recent standard library improvements, for example, are only

available by default in Python 3.x.

Guido van Rossum (the original creator of the Python language) decided to clean up Python 2.x properly, with less regard for backwards compatibility than is the case for new releases in the 2.x range. The most drastic improvement is the better Unicode support (with all text strings being Unicode by default) as well as saner bytes/Unicode separation.

Besides, several aspects of the core language (such as print and exec being statements, integers using floor division) have been adjusted to be easier for newcomers to learn and to be more consistent with the rest of the language, and old cruft has been removed (for example, all classes are now new-style, "range()" returns a memory efficient iterable, not a list as in 2.x). 

py23的詳細區別

PRINT IS A FUNCTION

The statement has been replaced with a print() function, with keyword arguments to replace most of the special syntax of the old statement (PEP 3105). Examples: 

1

2

3

4

5

6

7

Old: print "The answer is", 2*2 New: print("The answer is", 2*2)

Old: print x, # Trailing comma suppresses newline New: print(x, end=" ") # Appends a space instead of a newline

Old: print # Prints a newline

New: print() # You must call the function!

Old: print >>sys.stderr, "fatal error" New: print("fatal error", file=sys.stderr)

Old: print (x, y) # prints repr((x, y))

New: print((x, y)) # Not the same as print(x, y)!

You can also customize the separator between items, e.g.: 

1

print("There are <", 2**32, "> possibilities!", sep="")

ALL IS UNICODE NOW

從此不再為討厭的字元編碼而煩惱

  

某些庫改名了

 

Old Name

New Name

_winreg

winreg

ConfigParser

configparser

copy_reg

copyreg

Queue

queue

SocketServer

socketserver

markupbase

_markupbase

repr

reprlib

test.test_support

test.support

  Twisted非同步的網路框架,在單線程下比多線程還快。暫時不支持Python3,應該2017年會支持。

還有誰不支持PYTHON3?

One popular module that don't yet support Python 3 is Twisted (for networking and other applications). Most

actively maintained libraries have people working on 3.x support. For some libraries, it's more of a priority than

others: Twisted, for example, is mostly focused on production servers, where supporting older versions of

Python is important, let alone supporting a new version that includes major changes to the language. (Twisted is

a prime example of a major package where porting to 3.x is far from trivial 

 

四、Python安裝

 1 1、下載安裝包
 2 
 3     https://www.python.org/downloads/
 4 
 5 2、安裝
 6 
 7     預設安裝路徑:C:\python27
 8 
 9 3、配置環境變數
10 
11     【右鍵電腦】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變數】--》【在第二個內容框中找到 變數名為Path 的一行,雙擊】 --> 【Python安裝目錄追加到變值值中,用 ; 分割】
12 
13     如:原來的值;C:\python27,切記前面有分號
windows
1 無需安裝,原裝Python環境
2 
3   
4 
5 ps:如果自帶2.6,請更新至2.7
linux、Mac

五、Hello World程式

在linux 下創建一個文件叫hello.py,並輸入

 

print("Hello World!")
1 localhost:~ jieli$ vim hello.py
2 
3 localhost:~ jieli$ python hello.py
4 
5 Hello World!
終端執行結果

 

指定解釋器然後執行命令:python hello.py ,輸出

上一步中執行 python hello.py 時,明確的指出 hello.py 腳本由 python 解釋器來執行。

如果想要類似於執行shell腳本一樣執行python腳本,例: ./hello.py ,那麼就需要在 hello.py 文件的頭部指定解釋器,如下:

#!/usr/bin/env python  聲明你的解釋器是什麼,這裡env是到整個Linux系統里找一個叫python的環境變數。

#!/usr/bin/python  聲明你的解釋器是什麼,這個是按路徑找Python這個環境變數,鎖死了。儘量不要用這個。

#!/usr/bin/env python

  

print "hello,world"

 

ps:執行前需給予 hello.py 執行許可權,chmod 755 hello.py如此一來,執行: ./hello.py 即可。

在交互器中執行 

除了把程式寫在文件里,還可以直接調用python自帶的交互器運行代碼, 

localhost:~ jieli$ python

Python 2.7.10 (default, Oct 23 2015, 18:05:06)

[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> print("Hello World!")

Hello World!

 


六、變數
\字元編碼   

Variables are used to store information to be referenced and manipulated in a computer program. They also provide a way of labeling data with a descriptive name, so our programs can be understood more clearly by the reader and ourselves. It is helpful to think of variables as containers that hold information. Their sole purpose is to label and store data in memory. This data can then be used throughout your program.

聲明變數

#_*_coding:utf-8_*_

 

name = "zhao"

 

 上述代碼聲明瞭一個變數,變數名為: name,變數name的值為:"zhao" 

變數定義的規則:

  • 變數名只能是 字母、數字或下劃線的任意組合
  • 變數名的第一個字元不能是數字
  • 以下關鍵字不能聲明為變數名
    ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

變數的賦值

name = "zhao"

 

name2 = name

print(name,name2)

 

name = "Jack"

gf_of_odlboy = "Chen rong hua" 還可以這用寫 python建議的寫法,還有一種駝峰寫法。
print("What is the value of name2 now?")

PIE = 什麼什麼。。就是讓你知道它是常量,但是也能改。只是讓你知道。

             小結1:

              -1、變數只能是字母、數字、以及下劃線組成。但變數的第一位不能是數字 

              -2、變數名不能使用python的內置變數,做變數名。

              -3、變數名定義的時候,名字一定是要有含義的,不然時間一長,或者變數過長,你就忘記是幹啥的了。

              -4、變數名的寫法,普通小寫英文name = "Jack",或者gf_of_zhao = "Li hai feng" (官方建議寫法)

七、字元編碼

python解釋器在載入 .py 文件中的代碼時,會對內容進行編碼(預設ascill)

ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,其最多只能用 8 位來表示(一個位元組),即:2**8 = 256-1,所以,ASCII碼最多只能表示 255 個符號。

 

 

關於中文

為了處理漢字,程式員設計了用於簡體中文的GB2312和用於繁體中文的big5。

GB2312(1980年)一共收錄了7445個字元,包括6763個漢字和682個其它符號。漢字區的內碼範圍高位元組從B0-F7,低位元組從A1-FE,占用的碼位是72*94=6768。其中有5個空位是D7FA-D7FE。

GB2312 支持的漢字太少。1995年的漢字擴展規範GBK1.0收錄了21886個符號,它分為漢字區和圖形符號區。漢字區包括21003個字元。2000年的 GB18030是取代GBK1.0的正式國家標準。該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字。現在的PC平臺必須支持GB18030,對嵌入式產品暫不作要求。所以手機、MP3一般只支持GB2312。

從ASCII、GB2312、GBK 到GB18030,這些編碼方法是向下相容的,即同一個字元在這些方案中總是有相同的編碼,後面的標準支持更多的字元。在這些編碼中,英文和中文可以統一地處理。區分中文編碼的方法是高位元組的最高位不為0。按照程式員的稱呼,GB2312、GBK到GB18030都屬於雙位元組字元集 (DBCS)。

有的中文Windows的預設內碼還是GBK,可以通過GB18030升級包升級到GB18030。不過GB18030相對GBK增加的字元,普通人是很難用到的,通常我們還是用GBK指代中文Windows內碼。

 

 

顯然ASCII碼無法將世界上的各種文字和符號全部表示,所以,就需要新出一種可以代表所有字元和符號的編碼,即:Unicode

Unicode(統一碼、萬國碼、單一碼)是一種在電腦上使用的字元編碼。Unicode 是為瞭解決傳統的字元編碼方案的局限而產生的,它為每種語言中的每個字元設定了統一併且唯一的二進位編碼,規定雖有的字元和符號最少由 16 位來表示(2個位元組),即:2 **16 = 65536,
註:此處說的的是最少2個位元組,可能更多

UTF-8,是對Unicode編碼的壓縮和優化,他不再使用最少使用2個位元組,而是將所有的字元和符號進行分類:ascii碼中的內容用1個位元組保存、歐洲的字元用2個位元組保存,東亞的字元用3個位元組保存...

小結:

              -1、字元編碼的鼻祖是ASCII  255  1bytes

                            -->1980 gb2312 7xxxx漢字

                                   -->1995  GBK1.0  2w+

                                          -->2000 GB18030 27XXXX

                            -->unicode 2bytes

                                   -->utf-8   en:1byte, zh:3bytes

所以,python解釋器在載入 .py 文件中的代碼時,會對內容進行編碼(預設ascill),如果是如下代碼的話:

報錯:ascii碼無法表示中文,python2.x里這樣寫會報錯。

#!/usr/bin/env python

  

print "你好,世界"

 

  

 

改正:應該顯示的告訴python解釋器,用什麼編碼來執行源代碼,即:

1

2

3

4

#!/usr/bin/env python

# -*- coding: utf-8 -*-

  

print "你好,世界"

註釋

  當行註視:# 被註釋內容

  多行註釋:""" 被註釋內容 """

  列印多行:”””多行內容”””

 

 

八、用戶輸入 

#!/usr/bin/env python

#_*_coding:utf-8_*_

 

 

#name = raw_input("What is your name?") #only on python 2.x

name = input("What is your name?")

print("Hello " + name )
#!/usr/bin/env python

# -*- coding: utf-8 -*-

  

import getpass

  

# 將用戶輸入的內容賦值給 name 變數

pwd = getpass.getpass("請輸入密碼:")

  

# 列印輸入的內容

print(pwd)

 

 輸入密碼時,如果想要不可見,需要利用getpass 模塊中的 getpass方法,即:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
import getpass
  
# 將用戶輸入的內容賦值給 name 變數
pwd = getpass.getpass("請輸入密碼:")
  
# 列印輸入的內容
print(pwd)

如下是自己寫的一些代碼

__author__ = 'zht'

#!/usr/bin/env python

# -*- coding: utf-8 -*-

'''

#努力學習每一天

'''





name = input("name:")
#raw_input 2.x = input 3.x
#inptu2.x是這樣的。去找變數了(多疑的一個語法,忘記他)


age = int(input("age:"))

#可以查看輸出的類型,而且可以轉回字元串

print(type(age),type(str(age)))

job = input("job:")

salary = input("salary:")

'''

%s 的全稱是什麼是string

string

n. 線,弦,細繩;一串,一行

#第一種字元拼接的方法



%d代表只能接受數字  必須要Int整形。



%f是浮點

一般都只用%s和%d

'''

# info = '''

#

# --------  info fo '''+ name +''' -------

# Name:''' + name + '''

# Age: ''' + age +'''

# Job: ''' + job  +'''

# salary: ''' + salary





#第二種字元拼接的方法

info = '''



--------  info fo %s -------

Name:%s

Age: %d

Job: %s

salary: %s

'''%(name,name,age,job,salary)



print(info)

 

C:\Users\zht\AppData\Local\Programs\Python\Python35\python.exe D:/python3.5/Python14/day1/interaction.py

name:25

age:25

job:252

salary:25

Traceback (most recent call last):

  File "D:/python3.5/Python14/day1/interaction.py", line 38, in <module>

    '''%(name,name,age,job,salary)

TypeError: %d format: a number is required, not str

Process finished with exit code 1

 

這種是特定的寫法,官方推薦,獎勵用監控的能講到。

#第三種字元拼接的方法



info2 = '''



--------  info fo {_name} -------

Name:{_name}

Age: {_age}

Job: {_job}

salary: {_salary}

'''.format(_name=name,

           _age=age,

           _job=job,

           _salary=salary)

print(info2)
#第四種字元拼接的方法



info3 = '''



--------  info fo {0} -------

Name:{0}

Age: {1}

Job: {2}

salary:{3}

'''.format(name,age,job,salary)

print(info3)

 

小結:

              -1、input輸入

              -2、字元串的3中拼接方式,+號的那種比較浪費記憶體空間,不到萬不得已不要使用,%s可以用,.format是官方推薦。記住後兩種就可以了。

              -3、還講了input在Python3裡面和在2.x裡面的區別,和raw_input

九、模塊初識  

Python的強大之處在於他有非常豐富和強大的標準庫和第三方庫,幾乎你想實現的任何功能都有相應的Python庫支持,以後的課程中會深入講解常用到的各種庫,現在,我們先來象徵性的學2個簡單的。

 

Getpass

 

import getpass

username = input("username:")

password = getpass.getpass("password:")

註意這個在pycharm里會卡死,必須在終端里去執行

sys

#!/usr/bin/env python

# -*- coding: utf-8 -*-

 

import sys

 

print(sys.argv)

 

 

#輸出

$ python test.py helo world

['test.py', 'helo', 'world']  #把執行腳本時傳遞的參數獲取到了

 


os
  

#!/usr/bin/env python

# -*- coding: utf-8 -*-

 

import os

 

os.system("df -h") #調用系統命令
import os,sys

 

os.system(''.join(sys.argv[1:])) #把用戶的輸入的參數當作一條命令交給os.system來執行

 

完全結合一下  

自己寫個模塊

python tab補全模塊

         for mac

              1 import sys
              2 import readline
              3 import rlcompleter
              4 
              5 if sys.platform == 'darwin' and sys.version_info[0] == 2:
              6     readline.parse_and_bind("bind ^I rl_complete")
              7 else:
              8     readline.parse_and_bind("tab: complete")  # linux and python3 on mac

           

         for Linux

              1 #!/usr/bin/env python 
               2 # python startup file 
               3 import sys
               4 import readline
               5 import rlcompleter
               6 import atexit
               7 import os
               8 # tab completion 
               9 readline.parse_and_bind('tab: complete')
              10 # history file 
              11 histfile = os.path.join(os.environ['HOME'], '.pythonhistory')
              12 try:
              13     readline.read_history_file(histfile)
              14 except IOError:
              15     pass
              16 atexit.register(readline.write_history_file, histfile)
              17 del os, histfile, readline, rlcompleter

           

寫完保存後就可以使用了

localhost:~ jieli$ python

Python 2.7.10 (default, Oct 23 2015, 18:05:06)

[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> 
              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、創建用戶 adduser '用戶名' 2、由root用戶進入到其他用戶的終端 su nannanbin 這裡需要註意,有一些命令可能是root許可權才能使用的,這個時候切換成普通用戶的時候,可能會導致這些命令用不了。 3、ls 展示當前目錄下的文件列表,只是展示文件的名稱而已 當然如果你想要看每個 ...
  • 本文地址:http://www.cnblogs.com/aiweixiao/p/7535351.html 歡迎關註我的微信公眾號哈 “ 程式員的文娛情懷” http://t.cn/RotyZtu 【背景】:由於 file函數是一次性將所有內容讀入記憶體,而php為了防止一些寫的比較糟糕的程式占用太多的 ...
  • 博客園是個非常好的學習知識的地方,相信有很多人跟我一樣,園齡3年,從博客園不知道拷了多少代碼,看了多少博客,自己卻一篇博客都沒寫過。真是罪過。 這次準備寫幾篇關於這個項目源碼的閱讀和理解的文章,大家一起相互學習學習,我可能不會單單就寫源碼一類的東西,還會做很多擴展,比如新的c++的語法,其他的一些工 ...
  • 1 異常概述 2 異常體系 3 異常的原理 4 異常對象的拋出 5 自定義異常&異常類的拋出(throws) 6 異常的分類 7 throw和throws的區別? 8 異常的捕獲 9 異常處理的原則 10 異常的註意事項 ...
  • 簡介 網路無處不在,移動互聯時代也早已到來,單機版程式慢慢的已沒有生命力,所有的程式都要能夠訪問網路,比如 QQ 網路聊天程式、迅雷下載程式等,這些程式都要同網路打交道,本次將與各位小伙伴們分享的就是 Java 中的網路編程—— Socket 通信。 網路基礎知識 兩台電腦要通過網路進行通信,必須 ...
  • 一、添加 devtools 依賴 當配置了 devtools 後,我們在classpath修改任何文件項目都將會自動重啟。 (1)某些資源在更改時不一定需要觸發重新啟動。例如, Thymeleaf 模板可以就地進行編輯。預設情況下更改資源路徑包括了:/META-INF/maven, /META-IN ...
  • 最近做了幾道關於二分法的題目,覺得比較典型,因此拿出來說一說。 首先,先把題目分享一下。 題目描述:上題中講了一個故事,故事大意不用過多關註,有用部分為:某地主有一個大糧倉,這個糧倉容量為 n 個單位,但這個糧倉有個小口,每天會有一部分麻雀過來偷吃糧食,同時地主每天也會從別的地方運來糧食填補。開始的 ...
  • 我是一名建築學的學生,第一次瞭解到Python這門課是選課的時候。說實話,學c語言的時候我學的就並不好,感覺自己並沒有天分。我只是按照我的人才培養方案看課的時候才第一次看到這門課。起初並不知道這門課意味著什麼,就給軟工的朋友打電話咨詢。然後又上百度搜索,感覺還挺有用,就選了這門課。 一個建築生,平時 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...