1. 程式人生 > >01-Python的介紹_Python程式設計之路

01-Python的介紹_Python程式設計之路

原文章釋出於特克斯部落格www.susmote.com

首先用一句業內非常出名的話來介紹Python

“人生苦短,我用Python”

這也是Python宣傳時經常說的一句話

從這句話中,可以非常清楚Python他到底優點在哪裡,為什麼要去學Python

python的發展歷程

Python是在1990年被吉多·範羅蘇姆 (Guido van Rossum)建立發明,1989年的聖誕節期間,吉多·範羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的指令碼解釋程式,作為ABC語言的一種繼承。  

Python的名字來源於python創造者看的BBC的一部劇“Monty Python’s Flying Circus”

Python英文翻譯過來是蟒蛇的意思

Python版本的發展過程如下


Python 已經成為最受歡迎的程式設計語言之一。2011年1月,它被TIOBE程式語言排行榜評為2010年度語言。自從2004年以後,python的使用率呈線性增長


由於Python語言的簡潔性、易讀性以及可擴充套件性,在國外用Python做科學計算的研究機構日益增多,一些知名大學已經採用Python來教授程式設計課程。例如卡耐基梅隆大學的程式設計基礎、麻省理工學院的電腦科學及程式設計導論就使用Python語言講授。眾多開源的科學計算軟體包都提供了Python的呼叫介面,例如著名的計算機視覺庫OpenCV、三維視覺化庫VTK、醫學影象處理庫ITK。而Python專用的科學計算擴充套件庫就更多了,例如如下3個十分經典的科學計算擴充套件庫:NumPy、SciPy和matplotlib,它們分別為Python提供了快速陣列處理、數值運算以及繪圖功能。因此Python語言及其眾多的擴充套件庫所構成的開發環境十分適合工程技術、科研人員處理實驗資料、製作圖表,甚至開發科學計算應用程式。


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在一些公司的應用

  • Reddit - 社交分享網站,最早用Lisp開發,在2005年轉為python
  • Dropbox - 檔案分享服務
  • 豆瓣網 - 圖書、唱片、電影等文化產品的資料資料庫網站
  • Django - 鼓勵快速開發的Web應用框架
  • Fabric - 用於管理成百上千臺Linux主機的程式庫
  • EVE - 網路遊戲EVE大量使用Python進行開發
  • Blender - 以C與Python開發的開源3D繪圖軟體
  • BitTorrent - bt下載軟體客戶端
  • Ubuntu Software Center - Ubuntu 9.10版本後自帶的圖形化包管理器
  • YUM - 用於RPM相容的Linux系統上的包管理器
  • Civilization IV - 遊戲《文明4》
  • Battlefield 2 - 遊戲《戰地2》
  • Google - 谷歌在很多專案中用python作為網路應用的後端,如Google Groups、Gmail、Google Maps等,Google App Engine支援python作為開發語言
  • NASA - 美國宇航局,從1994年起把python作為主要開發語言
  • Industrial Light & Magic - 工業光魔,喬治·盧卡斯創立的電影特效公司
  • Yahoo! Groups - 雅虎推出的群組交流平臺
  • YouTube - 視訊分享網站,在某些功能上使用到python
  • Cinema 4D - 一套整合3D模型、動畫與繪圖的高階三維繪圖軟體,以其高速的運算和強大的渲染外掛著稱
  • Autodesk Maya - 3D建模軟體,支援python作為指令碼語言
  • gedit - Linux平臺的文字編輯器
  • GIMP - Linux平臺的影象處理軟體
  • Minecraft: Pi Edition - 遊戲《Minecraft》的樹莓派版本
  • MySQL Workbench - 視覺化資料庫管理工具
  • Digg - 社交新聞分享網站
  • Mozilla - 為支援和領導開源的Mozilla專案而設立的一個非營利組織
  • Quora - 社交問答網站
  • Path - 私密社交應用
  • Pinterest - 圖片社交分享網站
  • SlideShare - 幻燈片儲存、展示、分享的網站
  • Yelp - 美國商戶點評網站
  • Slide - 社交遊戲/應用開發公司,被谷歌收購

...

Python的風格

Python在設計上堅持了清晰劃一的風格,這使得Python成為一門易讀、易維護,並且被大量使用者所歡迎的、用途廣泛的語言。

設計者開發時總的指導思想是,對於一個特定的問題,只要有一種最好的方法來解決就好了。這在由Tim Peters寫的Python格言(稱為The Zen of Python)裡面表述為:There should be one-- and preferably only one --obvious way to do it. 這正好和Perl語言(另一種功能類似的高階動態語言)的中心思想TMTOWTDI(There's More Than One Way To Do It)完全相反。

Python的作者有意的設計限制性很強的語法,使得不好的程式設計習慣(例如if語句的下一行不向右縮排)都不能通過編譯。其中很重要的一項就是Python的縮排規則。

一個和其他大多數語言(如C)的區別就是,一個模組的界限,完全是由每行的首字元在這一行的位置來決定的(而C語言是用一對花括號{}來明確的定出模組的邊界的,與字元的位置毫無關係)。這一點曾經引起過爭議。因為自從C這類的語言誕生後,語言的語法含義與字元的排列方式分離開來,曾經被認為是一種程式語言的進步。不過不可否認的是,通過強制程式設計師們縮排(包括if,for和函式定義等所有需要使用模組的地方),Python確實使得程式更加清晰和美觀。

Python是一門直譯器語言

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

編譯型和解釋型


傳統意義上的所謂編譯與解釋,區別在於程式碼是在什麼時候被翻譯成目標CPU的指令。——雖然這種解釋從科學上說不通,但這卻是一直以來大家更認可的更約定俗成的定義。

對 C 語言或者其他編譯型語言來說,編譯生成了目標檔案,而這個目標檔案是針對特定的 CPU 體系的,為 ARM 生成的目標檔案,不能被用於 MIPS 的 CPU。這段程式碼在編譯過程中就已經被翻譯成了目標 CPU 指令,所以,如果這個程式需要在另外一種 CPU 上面執行,這個程式碼就必須重新編譯。

對於各種非編譯型語言(例如python/java)來說,同樣也可能存在某種編譯過程,但他們編譯生成的通常是一種『平臺無關』的中間程式碼,這種程式碼一般不是針對特定的 CPU 平臺,他們是在執行過程中才被翻譯成目標 CPU 指令的,因而,在 ARM CPU 上能執行,換到 MIPS 也能執行,換到 X86 也能執行,不需要重新對原始碼進行編譯。

至於為什麼會有虛擬機器的存在?這個答案也很簡單了,因為那些非編譯型語言生成的並不是目標平臺的程式碼,而是某種中間程式碼。而能夠執行這種中間程式碼的機器並不廣泛存在,所以我們在每個不同的平臺中用軟體模擬出這個假想平臺的虛擬機器,這個虛擬機器執行這種中間程式碼,而虛擬機器負責把程式碼轉換成最終的目標平臺上的指令。

用兩張圖來表示就很清楚了



靜態語言和動態語言

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

(1)動態型別語言:動態型別語言是指在執行期間才去做資料型別檢查的語言,也就是說,在用動態型別的語言程式設計時,永遠也不用給任何變數指定資料型別,該語言會在你第一次賦值給變數時,在內部將資料型別記錄下來。Python和Ruby就是一種典型的動態型別語言,其他的各種指令碼語言如VBScript也多少屬於動態型別語言。

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

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

首先用一張圖來說明那些是強型別語言,那些是弱型別語言,哪些是動態語言,哪些是靜態語言


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


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


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

強型別定義語言在速度上可能略遜色於弱型別定義語言,但是強型別定義語言帶來的嚴謹效能夠有效的避免許多錯誤。另外,“這門語言是不是動態語言”與“這門語言是否型別安全”之間是完全沒有聯絡的!

例如:Python是動態語言,是強型別定義語言(型別安全的語言); VBScript是動態語言,是弱型別定義語言(型別不安全的語言); JAVA是靜態語言,是強型別定義語言(型別安全的語言)。

後續我們講到Python的資料型別就會很清楚了

Python的優點和缺點

優點

  • 簡單:Python是一種代表簡單主義思想的語言。閱讀一個良好的Python程式就感覺像是在讀英語一樣。它使你能夠專注於解決問題而不是去搞明白語言本身。
  • 易學:Python極其容易上手,因為Python有極其簡單的說明文件 。
  • 速度快:Python 的底層是用 C 語言寫的,很多標準庫和第三方庫也都是用 C 寫的,執行速度非常快。
  • 免費、開源:Python是FLOSS(自由/開放原始碼軟體)之一。使用者可以自由地釋出這個軟體的拷貝、閱讀它的原始碼、對它做改動、把它的一部分用於新的自由軟體中。FLOSS是基於一個團體分享知識的概念。
  • 高層語言:用Python語言編寫程式的時候無需考慮諸如如何管理你的程式使用的記憶體一類的底層細節。
  • 可移植性:由於它的開源本質,Python已經被移植在許多平臺上(經過改動使它能夠工作在不同平臺上)。這些平臺包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基於linux開發的android平臺。
  • 解釋性:一個用編譯性語言比如C或C++寫的程式可以從原始檔(即C或C++語言)轉換到一個你的計算機使用的語言(二進位制程式碼,即0和1)。這個過程通過編譯器和不同的標記、選項完成。
    執行程式的時候,連線/轉載器軟體把你的程式從硬碟複製到記憶體中並且執行。而Python語言寫的程式不需要編譯成二進位制程式碼。你可以直接從原始碼執行 程式。
    在計算機內部,Python直譯器把原始碼轉換成稱為位元組碼的中間形式,然後再把它翻譯成計算機使用的機器語言並執行。這使得使用Python更加簡單。也使得Python程式更加易於移植。
  • 面向物件:Python既支援面向過程的程式設計也支援面向物件的程式設計。在“面向過程”的語言中,程式是由過程或僅僅是可重用程式碼的函式構建起來的。在“面向物件”的語言中,程式是由資料和功能組合而成的物件構建起來的。
  • 可擴充套件性:如果需要一段關鍵程式碼執行得更快或者希望某些演算法不公開,可以部分程式用C或C++編寫,然後在Python程式中使用它們。
    可嵌入性:可以把Python嵌入C/C++程式,從而向程式使用者提供指令碼功能。
  • 豐富的庫:Python標準庫確實很龐大。它可以幫助處理各種工作,包括正則表示式、文件生成、單元測試、執行緒、資料庫、網頁瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV檔案、密碼系統、GUI(圖形使用者介面)、Tk和其他與系統有關的操作。這被稱作Python的“功能齊全”理念。除了標準庫以外,還有許多其他高質量的庫,如wxPython、Twisted和Python影象庫等等。
  • 規範的程式碼:Python採用強制縮排的方式使得程式碼具有較好可讀性。而Python語言寫的程式不需要編譯成二進位制程式碼。

缺點

  • 單行語句和命令列輸出問題:很多時候不能將程式連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無此限制,可以較為方便的在shell下完成簡單程式,不需要如Python一樣,必須將程式寫入一個.py檔案。
  • 獨特的語法:這也許不應該被稱為侷限,但是它用縮排來區分語句關係的方式還是給很多初學者帶來了困惑。即便是很有經驗的Python程式設計師,也可能陷入陷阱當中。
  • 執行速度慢:這裡是指與C和C++相比。

Python的版本

  • Python 1.0 - January 1994 增加了 lambda, map, filter 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 3.6 - December 23,2016
  • python 3.7.0 beta -  Janurary 31,2018 

2018年3月,該語言作者在郵件列表上宣佈 Python 2.7將於2020年1月1日終止支援。使用者如果想要在這個日期之後繼續得到與Python 2.7有關的支援,則需要付費給商業供應商。

相關推薦

01-Python介紹_Python程式設計

原文章釋出於特克斯部落格www.susmote.com首先用一句業內非常出名的話來介紹Python“人生苦短,我用Python”這也是Python宣傳時經常說的一句話從這句話中,可以非常清楚Python他到底優點在哪裡,為什麼要去學Pythonpython的發展歷程Pytho

python小白學習--01

continue while True for count 為了堅持而堅持(這話說了自己不信)作為一個不懂編程的桌面,在技術的路上越走越遠,嚴重到了找工作都很難的階段,很心酸。。。作為一個幹啥啥不行,吃啥啥有夠,韓劇看不夠,年紀又不小的我來說,在進步很難,不知路又走到哪就跑偏了,為了找到好工作

【練習題】第一章--程式設計(Think Python

在這貼上電子書(感謝網上大神的分享,這本書確實不錯,在用程式開發的思想教學): https://cycleuser.gitbooks.io/think-python/content/ 1.在print語句後面的括號去掉一個或者兩個,看看會怎麼樣? 據說python2是可以這麼

Python小白學習(十四)—【作用域】【匿名函式】【程式設計方法論】【高階函式】

    吧啦吧啦內心戲 在沒有具體學作用域之前,我在之前的學習筆記中就有提到 我開始以為是自己自創的詞兒 沒想到這個詞早已經存在(手動捂臉) 真是個無知的小火鍋(不知者無罪) 我發現自己最擅長做的事情,就是給自己找個臺階,然後很快順勢滑下來 一、作用域 先來一段程式碼分析一波吧

Python程式設計 ---- 練習3

1.寫函式,修改指定檔案中的內容,使用者傳入修改的檔名,與要修改的內容,執行函式,完成批了修改操作 def batch_edit(filename,old_contcnt,new_content):

Python小白學習—變量、字符編碼、字符拼接

sdi 電路 input elif action aps 類型 lam job 變量命名規則: (1)變量名只能是字母,數字,下劃線的任意組合。  ex:_amber_666NAme (2)關鍵字不能聲明為變量名  ex:[‘and‘, ‘as‘, ‘assert‘, ‘

Python小白學習—while、for循環、運算

範圍 src 格式 次循環 pen 映射 年齡 退出 finish Python裏面的循環跟其他語言裏的循環基本一致,只是書寫格式不同。 1.for循環: for [循環條件]:[循環語句]  滿足循環條件,則執行循環語句,執行一次判斷一次,不滿足則結束循環。 簡單的循環:

python語言的自學

python 之前粗略看過一次python的語言,語法簡單。由於時間過了太久,好像有兩年了吧(之前就是純粹想知道python是什麽才看的),也不記得什麽了,只是記得它沒有c語言和java語言難就是了。 根據這個網站中的資料可以很快入手python:http://www.runoob.c

python語言的自學3

python正則匹配裏面方法分為兩種使用方法:方法1:import restr = ‘i am a bad hero‘re.search(‘am’,str)re.match(‘am’,str)re.findall(‘am’,str)re.finditer(‘am’,str)方法2:import restr =

BigBao 的python開發到DevOps

big targe blog class HA 培訓 ... devops www. 本人是打雜的,從想學Python到自學Python,最後到報班培訓Python路程總共用時兩年,目前在培訓Python。因為我這個大腦不適合自學。腦袋笨,自制力差,所以沒辦法只有乖乖交錢學

01 前言/基礎設施 - DevOps

img dev 快速 ref 問題 文章 都對 簡介 IT 01 前言/基礎設施 - DevOps之路 文章Github地址,歡迎start:https://github.com/li-keli/DevOps-WiKi 簡介 基礎架構采用DevOps設計思想,

python 零基礎學習 02-python入門

必須 入門 跨平臺 real 邏輯運算 除了 不依賴 詞典 命令行   不知不覺學習python已經兩個月了,從一開始不知道如何對print的格式化,到現在可以手擼orm,這期間真的是 一個神奇的過程。為了鞏固自己的基礎知識,為後面的拓展埋下更好的伏筆,此文當以導師的博客來

Python運維開發》 內置函數&數據結構(六)

ima oob 更新 .com 常用 嵌套列表 數據結構 例子 func 一、Python內置函數詳解 Python內置函數圖解 您也可以訪問(裏面有各種例子):https://docs.python.org/3/library/functions.html#nex

Python人工智能 - 第一篇 : 你得會點兒Python基礎

序列 但是 入參 而不是 username 定義函數 json序列化 並且 color Python 號稱是最接近人工智能的語言,因為它的動態便捷性和靈活的三方擴展,成就了它在人工智能領域的豐碑 走進Python,靠近人工智能 一.編程語言Python的基礎 之 "淺入淺出

Python人工智能 - 第三篇 : PyAudio 實現錄音 自動化交互實現問答

獲得 本地文件 一次 cor ets win 不清晰 考題 dbo Python 很強大其原因就是因為它龐大的三方庫 , 資源是非常的豐富 , 當然也不會缺少關於音頻的庫 關於音頻, PyAudio 這個庫, 可以實現開啟麥克風錄音, 可以播放音頻文件等等,此刻我們不去了解

python全棧開發

方法 blog 數據 數據類型 框架 blank 全棧 jquery基礎 one 一、Python基礎 python簡介 python數據類型(數字\字符串\列表) python數據類型(元組\字典) 二、Python文件操作&函數 三、Pytho

Python全棧開發 【第八篇】:面向對象編程設計與開發(2)

ssi pen 解析 執行 示例 動態 類型 put 所有 一、繼承與派生 什麽是繼承? 繼承指的是類與類之間的關系,是一種什麽是什麽的關系,繼承的功能之一就是用來解決代碼重用問題。 繼承是一種創建新的類的方式,在python中,新建的類可以繼承一個或多個父類,父類又可以成

01-python介紹-作業

bsp view 字符串 家裏 display clas 多行註釋 數字 none # 1、簡述變量量命名規範 # (1)數字、字母、下劃線組成 # (2)不能以數字開頭、不能是純數字 # (3)要有意義 # (4)不能太長 # (5)建議采用駝峰或下劃線命名 # (6

python 面向對象 方法和函數 反射

ron 創建 print sub *args port style 被調用 pre 一. isinstance(檢查第一個參數是否是第二個參數的 子子孫孫類) class Base(object): pass

Python全棧開發 【第十八篇】:Ajax技術

加載 完全 三種 請求 技術 當前頁 n) let 保存 Ajax技術 Ajax = 異步 JavaScript 和 XML。 Ajax 是一種在無需重新加載整個網頁的情況下,能夠更新部分網頁的技術。 1、jQuery的load()方法 jQuery load()方法是簡單