1. 程式人生 > 其它 >簡易的A星演算法 自動尋路 (C#)

簡易的A星演算法 自動尋路 (C#)

Python簡介

  • Python翻譯成漢語是蟒蛇的意思,並且Python的logo也是兩條纏繞在一起的蟒蛇的樣子,然而Python語言和蟒蛇實際上並沒有一毛錢關係。

     

  • Python語言是由荷蘭程式設計師Guido van Rossum,江湖人稱“龜叔”,獨立開發完成初版的。“龜叔”曾供職於google。1989年聖誕節期間,在阿姆斯特丹,為了打發聖誕節的無趣,決心開發一個新的計算機程式語言,然後他就這麼做了,並實現了(大神的能力)。之所以選中Python作為該程式語言的名字,是因為他是一個叫Monty Python喜劇團體的愛好者,其本意並不是想選條蟒蛇。

 

  • Python第一個公開發行版發行於1991年,所以這年被當作Python的誕生年。

  • Python 原始碼遵循 GPL(GNU General Public License)協議,這是一個開源的協議,也就是說你可以免費使用和傳播它,而不用擔心版權的問題。

  • 前面我們說了Python誕生自1991年,掰掰指頭算算都30年了,比1995年的JAVA語言都早了4年,為何大器晚成,現在才發力?

    • 其一,在1990那個年代,計算機效能相比現在差很多,程式執行速度和效率很重要,快速開發不是第一要務,壓榨機器效能才是。Python作為一門解釋型動態語言,在解釋方式上它天生就存在執行速度較慢的問題,因此不被當時程式設計界看好,其追求開發速度、強調簡潔優雅、降低程式設計門檻的核心理念有點超越當時主流。而時至今日,計算機的硬體效能已經得到數量級的提高,計算能力不再是限制程式語言的最重要的因素,敏捷開發成為生產環境下對語言選擇的重要因素,Python很好的滿足了這一點,從而得到快速發展。

    • 其二,Python出生不好。作為對比的JAVA出身名門,其東家為SUN,當時網際網路的頭號公司,類似現在Google的地位,因而得到大力推廣,並且有一群能力強、專職、有組織的團隊進行開發和維護,所以很快獲得成功,普及開來,至今仍然霸佔著程式語言的榜首位置。而Python是個人編寫的,寒門出身,龜叔沒有三頭六臂,個人時間精力都是有限的,雖然有一些志願者幫忙做一些事情,但無疑和JAVA的正規軍相比,能量還是要差了很多,這些都導致Python在初期發展得較為緩慢,甚至到如今都還未解決其被詬病的GIL問題。

Python語言特點

簡單易學、明確優雅、開發速度快

  • 簡單易學:與C和Java比,Python的學習成本和難度曲線不是低一點,更適合新手入門,自底向上的技術攀爬路線。先訂個小目標爬個小山,然後再往更高的山峰前進。而不像C和JAVA光語言學習本身,對於很多人來說就像珠穆朗瑪峰一樣高不可攀。

  • 明確優雅:Python的語法非常簡潔,程式碼量少,非常容易編寫,程式碼的測試、重構、維護等都非常容易。一個小小的指令碼,用C可能需要1000行,用JAVA可能幾百行,但是用Python往往只需要幾十行!

  • 開發速度快:當前網際網路企業的生命線是什麼?產品開發速度!如果你的開發速度不夠快,在你的產品推出之前別人家的產品已經上線了,你也就沒有生存空間了,這裡的真例項子數不勝數。那麼,Python的開發速度說第二沒人敢稱第一!

跨平臺、可移植、可擴充套件、互動式、解釋型、面向物件的動態語言

  • 跨平臺:Python支援Windows、Linux和MAC os等主流作業系統。

  • 可移植:程式碼通常不需要多少改動就能移植到別的平臺上使用。

  • 可擴充套件:Python語言本身由C語言編寫而成的,你完全可以在Python中嵌入C,從而提高程式碼的執行速度和效率。你也可以使用C語言重寫Python的任何模組,從根本上改寫Python,PyPy就是這麼幹的。

  • 互動式:Python提供很好的人機互動介面,比如IDLE和IPython。可以從終端輸入執行程式碼並獲得結果,互動的測試和除錯程式碼片斷。

  • 解釋型:Python語言在執行過程中由直譯器逐行分析,逐行執行並輸出結果。

  • 面向物件:Python語言具備所有的面向物件特性和功能,支援基於類的程式開發。

  • 動態語言:在執行時可以改變其結構。例如新的函式、物件、甚至程式碼可以被引進,已有的函式可以被刪除或是其他結構上的變化。動態語言非常具有活力。

“內建電池”,大量的標準庫和第三方庫

  • Python為我們提供了非常完善的基礎庫,覆蓋了系統、網路、檔案、GUI、資料庫、文字處理等方方面面,這些是隨同直譯器被預設安裝的,各平臺通用,你無需安裝第三方支援就可以完成大多數工作,這一特點被形象地稱作“內建電池(batteries included)”。

  • 在程式設計師界,有一句話叫做“不要重複造輪子”。什麼意思呢?就是說不要做重複的開發工作,如果對某個問題已經有開源的解決方案或者說第三方庫,就不要自己去開發,直接用別人的就好。不要過分迷信自己的程式碼能力,要知道,能作為標準庫被Python內建,必然在可靠性和演算法效率上達到了目前最高水平,能被廣泛使用的第三方庫,必然也是經受了大量的應用考驗。除非公司要求,不要自己去開發,請使用現成的庫。那些造輪子的事情,就交給世界最頂尖的那一波程式設計師去幹吧,沒有極致的思維和數學能力,想創造好用的輪子是很難的。

社群活躍,貢獻者多,互幫互助

  • 技術社群的存在就相當於程式設計師手中的指南針,沒有指南針,很多時候,碰到了問題,就像無頭的蒼蠅只能到處亂飛,最終在茫茫的海洋中轉暈致死。技術社群可以給我們對語言的學習和使用提供巨大的幫助,無論是前期的學習,還是日後的工作,只要有問題,技術社群的大牛都可以幫我們解決,有這些助力,可以幫我們更好地瞭解、學習和使用一門語言。技術社群同時還推動Python語言的發展方向,功能需求,促使公司企業更多的使用Python語言,招聘Python程式設計師。

開源語言,發展動力巨大

  • Python是基於C語言編寫的,並且使用GPL開源協議,你可以免費獲取它的原始碼,進行學習、研究甚至改進。眾人拾柴火焰高,有更多的人蔘與Python的開發,促使它更好的發展,被更多的應用,形成良性迴圈。Python為什麼會越來越火就是因為它的開放性,自由性,聚起了人氣,形成了社群,有很多人在其中做貢獻,用的人越來越多,自然就提高了市場佔有率,企業、公司、廠家就不得不使用Python,提供的Python程式設計師崗位就越來越多,這就是開源的力量。

Python的應用方向

  • 常規軟體開發

    • Python支援函數語言程式設計和OOP面向物件程式設計,能夠承擔任何種類軟體的開發工作,因此常規的軟體開發、指令碼編寫、網路程式設計等都屬於標配能力。

  • 科學計算

    • 隨著NumPy, SciPy, Matplotlib等眾多程式庫的開發,Python越來越適合於做科學計算、繪製高質量的2D和3D影象。和科學計算領域最流行的商業軟體Matlab相比,Python是一門通用的程式設計語言,比Matlab所採用的指令碼語言的應用範圍更廣泛,有更多的程式庫的支援。

  • 自動化運維

    • 這幾乎是Python應用的自留地,作為運維工程師首選的程式語言,Python在自動化運維方面已經深入人心,比如Saltstack和Ansible都是大名鼎鼎的自動化平臺。

  • 雲端計算

    • 開源雲端計算解決方案OpenStack就是基於Python開發的,搞雲端計算的同學都懂的。

  • WEB開發

    • 基於Python的Web開發框架不要太多,比如耳熟能詳的Django,還有Tornado,Flask。其中的Python+Django架構,應用範圍非常廣,開發速度非常快,學習門檻也很低,能夠幫助你快速的搭建起可用的WEB服務。

  • 網路爬蟲

    • 也稱網路蜘蛛,是大資料行業獲取資料的核心工具。沒有網路爬蟲自動地、不分晝夜地、高智慧地在網際網路上爬取免費的資料,那些大資料相關的公司恐怕要少四分之三。能夠編寫網路爬蟲的程式語言有不少,但Python絕對是其中的主流之一,其Scripy爬蟲框架應用非常廣泛。

  • 資料分析

    • 在大量資料的基礎上,結合科學計算、機器學習等技術,對資料進行清洗、去重、規格化和針對性的分析是大資料行業的基石。Python是資料分析的主流語言之一。

  • 人工智慧

    • Python在人工智慧大範疇領域內的機器學習、神經網路、深度學習等方面都是主流的程式語言,得到廣泛的支援和應用。

Python的使用者

  • 前面講了這麼多先進的當下最前沿的Python技術方向,那麼有哪些公司在使用Python呢?

  • 在國內最有名的就是知乎和豆瓣了,它們就是基於Python開發的Web服務。其它的例如百度、阿里、淘寶 、搜狐、金山、騰訊、盛大、網易、土豆、新浪、果殼等公司都在使用Python完成各種各樣的任務,幾乎所有的網際網路企業都在招聘Python程式設計師。

  • 在國外,更是數不勝數。谷歌的Google App Engine 、code.google.com 、Google earth 、谷歌爬蟲、廣告等專案都在大量使用Python進行開發。還有Facebook、Twitter等等等等。幾乎所有的Linux發行版都內建Python直譯器。

 

Python的缺點

  • 我們光說了Python的優點,也得說說它的缺點。任何程式語言都有缺點,Python也不例外。

    • 第一個缺點就是執行速度相對慢點,和C程式相比慢不少,這是解釋型語言的通病,你的Python程式碼在執行時會一行一行地翻譯成CPU能理解的機器碼,這個翻譯過程非常耗時,所以會變慢。而C程式作為編譯型語言是執行前直接編譯成CPU能執行的機器碼,所以非常快。(但同時你可以這麼理解,C語言把費時間的活在生產上線之前先花時間幹了,所以執行時就快了。)

      • 程式速度不再那麼重要,不一定非要追求極致

        • 早些時期CPU比較昂貴,計算資源很吃緊,記憶體也很貴,程式執行的速度和耗費的時間就很重要。這就是導致電腦科學致力於研究不同演算法的效率的原因之一。然而,這已經不再是最重要的因素,因為現在晶片很便宜,而且執行速度有了質的提升。執行時間不再是你最貴的資源。公司最貴的資源現在是員工時間。或者換句話說,就是你。在規定時間內把事情做完比把程式變快更加重要。Python語法簡潔,包含大量的標準庫和第三方庫,用較少的語句就可以完成其它語言上百條語句才能完成的任務,這無疑大大提高了開發的速度和效率,幫助你在儘可能短的時間內完成工作。

    • 第二個缺點就是Python2和Python3的不相容性