path=nx.all_pairs_shortest_path(G) #調(diào)用多源最短路徑算法,計(jì)算圖G所有節(jié)點(diǎn)間的最短路徑

偏關(guān)網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。創(chuàng)新互聯(lián)建站成立于2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
print path[0][2] #輸出節(jié)點(diǎn)0、2之間的最短路徑序列: [0, 1, 2]
def是python中拿來(lái)定義函數(shù)的
THEnum 是一個(gè)方法的名字,對(duì)于調(diào)用一個(gè)方法而言不是不可替換的,你可以定義其為其它名字,如 def nombre(node)
node是參數(shù)
然后調(diào)用的時(shí)候也用nombre這個(gè)名字
在為后端開(kāi)發(fā)選擇編程語(yǔ)言時(shí),您的選擇決定了產(chǎn)品將如何操作、擴(kuò)展和滿足用戶需求。
最常見(jiàn)的問(wèn)題之一是 Node.js 與 Python 的兩難選擇 。 這兩個(gè)選項(xiàng)非常受歡迎,并且各有利弊。我們與兩者合作,并在這里比較它們的優(yōu)缺點(diǎn),并幫助您確定哪個(gè)更適合您的項(xiàng)目。
定義產(chǎn)品種類。 它是數(shù)據(jù)量大的應(yīng)用程序還是以界面為中心的程序?它的功能主要是靜態(tài)的還是交互式的?在這個(gè)階段,分析你的競(jìng)爭(zhēng)對(duì)手、市場(chǎng)和最終用戶的需求。
定義區(qū)域。 了解你的產(chǎn)品將在哪里使用非常重要:在特定地區(qū)、全國(guó)或國(guó)際上。面積越大,你就越需要仔細(xì)考慮建筑和技術(shù)解決方案。
進(jìn)行市場(chǎng)調(diào)研。 獨(dú)特且不斷被要求是至關(guān)重要的。這意味著徹底的營(yíng)銷研究,了解你的主要競(jìng)爭(zhēng)對(duì)手,并擁有清晰的買家角色。
分析你的資源。 了解你擁有多少具有相關(guān)經(jīng)驗(yàn)的可用專家以及是否需要雇用外包開(kāi)發(fā)人員的時(shí)刻。
明確主要績(jī)效標(biāo)準(zhǔn)。 沒(méi)有完美的后端開(kāi)發(fā)工具。分析速度、安全性、交互性、響應(yīng)性,并選擇其中哪些具有最高優(yōu)先級(jí)。
Python 是一種面向?qū)ο蟮膭?dòng)態(tài)語(yǔ)言,因其簡(jiǎn)單的語(yǔ)法和通用性而備受推崇。Python 仍然是市場(chǎng)上最受歡迎的語(yǔ)言之一。
它的主要優(yōu)點(diǎn)之一是支持多種編程風(fēng)格,使其非常適合復(fù)雜的計(jì)算項(xiàng)目和簡(jiǎn)單的網(wǎng)站。
Statista將 Python 定義為 2020 年最流行的編程語(yǔ)言。它被全球 29% 的開(kāi)發(fā)人員使用。根據(jù)JetBrains 的研究,87% 了解 Python 的開(kāi)發(fā)人員使用 Python 作為他們的主要編程語(yǔ)言,其中 27% 的人將 Python 用于 Web 開(kāi)發(fā),28% 用于機(jī)器學(xué)習(xí),18% 用于數(shù)據(jù)分析。
Python 提供對(duì) Berkeley 套接字 API 的訪問(wèn)權(quán)限。這是處理客戶端-服務(wù)器網(wǎng)絡(luò)的模塊。Python 提供了一個(gè)簡(jiǎn)單而一致的 API,對(duì)應(yīng)于這些系統(tǒng)調(diào)用的 C 等價(jià)物。Python 有一些類,可以更輕松地在其代碼中使用這些低級(jí)套接字方法。
動(dòng)態(tài)和面向?qū)ο蟮恼Z(yǔ)法允許 Python 開(kāi)發(fā)人員花更少的時(shí)間處理復(fù)雜的代碼。許多軟件包、附加組件和庫(kù)提供了從最簡(jiǎn)單的 Web 后端到復(fù)雜的科學(xué)計(jì)算的現(xiàn)成選項(xiàng)。
這些東西使 Python 成為開(kāi)發(fā) MVP和原型的完美決策。結(jié)果: 快速進(jìn)入市場(chǎng),同時(shí)支持各種迭代,以及高比例的重用代碼。
與其他語(yǔ)言和開(kāi)發(fā)框架相比,Python 使用的代碼行更少。這不僅與數(shù)量有關(guān),而且還使團(tuán)隊(duì)工作時(shí)更容易理解代碼。 Python 允許程序員用幾行代碼表達(dá)復(fù)雜的想法。
Python 有一個(gè)特殊的好處,那就是經(jīng)常使用英語(yǔ)術(shù)語(yǔ)而不是數(shù)學(xué)表達(dá)式。該代碼易于閱讀和理解。
Python 應(yīng)對(duì)多種開(kāi)發(fā)挑戰(zhàn)。盡管生態(tài)系統(tǒng)并不新鮮,但不斷添加新軟件包和附加組件使其保持相關(guān)性。目前,它是最適合人工智能、計(jì)算機(jī)視覺(jué)、機(jī)器學(xué)習(xí)、數(shù)據(jù)科學(xué)、統(tǒng)計(jì)學(xué)和其他領(lǐng)域的語(yǔ)言之一。
Python 已經(jīng)存在了一段時(shí)間,所以它圍繞自己建立了一個(gè)大社區(qū)。開(kāi)發(fā)人員使用開(kāi)源資源和教程,這使得專業(yè)成長(zhǎng)和經(jīng)驗(yàn)交流更容易。
社區(qū)起初可能看起來(lái)并不重要,但它讓開(kāi)發(fā)人員參與并更新。
如果你優(yōu)先考慮高速,Python 將不是最佳選擇。Python 可以輕松處理密集型操作,但與其他語(yǔ)言相比,它需要更多時(shí)間。如果你需要運(yùn)行多個(gè)請(qǐng)求,Node.js 的異步輸入和輸出會(huì)更適合你。
移動(dòng)應(yīng)用程序的低性能是一個(gè)主要問(wèn)題。如果后端在設(shè)計(jì)上很慢,那么用戶體驗(yàn)就會(huì)受到影響。
使 Python 代碼適應(yīng)移動(dòng)設(shè)備的另一個(gè)問(wèn)題是它不能很好地與原生組件一起使用。如果你將不太兼容的代碼庫(kù)與低性能結(jié)合起來(lái),你將遇到性能問(wèn)題。
Node.js 是一個(gè)基于 JavaScript 編程語(yǔ)言的后端開(kāi)發(fā)運(yùn)行時(shí)環(huán)境。
Node.js 使用異步的、事件驅(qū)動(dòng)的輸入輸出。它表明運(yùn)行時(shí)環(huán)境可以同時(shí)處理多個(gè)請(qǐng)求,而不必等待前一個(gè)請(qǐng)求完成。
根據(jù)Statista的說(shuō)法,Node.js 是最常用的編程框架。大約 53% 的開(kāi)發(fā)人員在他們的項(xiàng)目中使用 Node.js。Twitter、Aliexpress、Coursera 和許多其他使用 Node.js 創(chuàng)建的巨頭。Netflix 和 Paypal 選擇 Node.js 來(lái)支持他們的微服務(wù)。它使他們能夠?qū)?dòng)時(shí)間從 40 分鐘縮短到 1 分鐘。
Node.js 是一種允許您創(chuàng)建 WebSocket (一種允許實(shí)時(shí)雙向客戶端-服務(wù)器網(wǎng)絡(luò)的協(xié)議)的編程語(yǔ)言。在在線應(yīng)用程序中,WebSockets 是 HTTP 通信的替代方案。一旦連接形成,通道就會(huì)保持打開(kāi)狀態(tài),從而實(shí)現(xiàn)高速連接,而客戶端-服務(wù)器網(wǎng)絡(luò)的延遲和開(kāi)銷很小。聊天、在線多人 游戲 、Google 文檔和其他常見(jiàn)用例只是其中的幾個(gè)例子。
Node.js 的主要優(yōu)勢(shì)是處理復(fù)雜的并發(fā)進(jìn)程。大型公司之所以選擇它來(lái)為其基礎(chǔ)架構(gòu)提供動(dòng)力,是因?yàn)樗哂锌焖偬幚泶笮凸ぷ髫?fù)載的成熟能力。
選擇 Node.js 的主要原因是它的快速性能。它在單個(gè) Node.js 服務(wù)器上并行處理大量請(qǐng)求。
Node.js 使用 Google Chrome V8 引擎作為運(yùn)行時(shí)環(huán)境來(lái)執(zhí)行 JavaScript。該引擎使用即時(shí)編譯來(lái)處理 JavaScript 代碼并快速提供即時(shí)輸出。它使 Node.js 成為交互式開(kāi)發(fā)的首選。
多虧了這一點(diǎn),您可以獲得出色的用戶體驗(yàn),使 Node.js 成為實(shí)時(shí)應(yīng)用程序、信使、 游戲 應(yīng)用程序等的首選。
全棧 Web 開(kāi)發(fā)是一種趨勢(shì)——Medium、Airbnb、Paypal、Netflix 等企業(yè)轉(zhuǎn)而使用 Node.js,在前端和后端開(kāi)發(fā)中都使用 JavaScript。它保證:
在 Node.js 服務(wù)器上的整個(gè)開(kāi)發(fā)過(guò)程中重用 JavaScript 可以加快交付速度并簡(jiǎn)化通信。當(dāng)所有團(tuán)隊(duì)成員都能理解代碼時(shí),這是一個(gè)巨大的優(yōu)勢(shì)。
Node.js 服務(wù)器有很多 NPM 包。Netflix 和 Paypal 同時(shí)遷移到 Node.js 和微服務(wù),取得了驚人的效果。他們擺脫了代碼重復(fù),組織了架構(gòu),引入了額外的功能,并改善了用戶體驗(yàn)。
Node.js 不能很好地處理復(fù)雜的操作。它的優(yōu)點(diǎn)是可以快速處理多個(gè)簡(jiǎn)單的請(qǐng)求,但是任何復(fù)雜的請(qǐng)求都會(huì)導(dǎo)致延遲。
假設(shè)您的應(yīng)用程序必須運(yùn)行復(fù)雜的操作。Node.js 不是一個(gè)好的選擇。有一些方法可以讓 Node.js 更好地處理復(fù)雜的任務(wù),但默認(rèn)功能并不完善。
該編程語(yǔ)言基于 NPM 模塊構(gòu)建,它允許您擴(kuò)展內(nèi)置功能并創(chuàng)建幾乎任何東西。然而,一個(gè)特定的模塊可以獨(dú)立運(yùn)行,但與系統(tǒng)的其余部分不兼容。
一些 NPM 模塊可能不兼容,需要重新設(shè)置。如果你運(yùn)行大型基礎(chǔ)架構(gòu),錯(cuò)誤可能會(huì)導(dǎo)致崩潰。
Node.js 和 Python 堆棧是出色的后端,為開(kāi)發(fā)人員提供了令人印象深刻的可能性。Python 擅長(zhǎng)執(zhí)行復(fù)雜的操作和支持創(chuàng)新,但它在速度上有所損失。Node.js 性能出眾,但不擅長(zhǎng)處理復(fù)雜的操作。但決定取決于項(xiàng)目類型。
調(diào)用python腳本(python腳本本身是傳參數(shù)的)
這里插入一個(gè)題外話,下面這段是對(duì)python傳參數(shù)的簡(jiǎn)單說(shuō)明一下:
復(fù)制代碼代碼如下:
# -*-coding:utf-8 -*-
'''
需要模塊:sys
參數(shù)個(gè)數(shù):len(sys.argv)
腳本名: sys.argv[0]
參數(shù)1: sys.argv[1]
參數(shù)2: sys.argv[2]
'''
import sys
print u"腳本名:", sys.argv[0]
for i in range(1, len(sys.argv)):#這里參數(shù)從1開(kāi)始
print u"參數(shù)", i, sys.argv[i]
在項(xiàng)目中遇到的問(wèn)題,記錄下來(lái),方便日后查閱和復(fù)習(xí)????
python-shell 一種從Node.js運(yùn)行Python腳本的簡(jiǎn)單方法,它具有基本但有效的進(jìn)程間通信和更好的錯(cuò)誤處理能力。 pythonshell官網(wǎng)
首先,請(qǐng)確保您能夠從終端運(yùn)行python3(Mac / Linux)或python(Windows)。如果不是,則可能需要將其添加到PATH。如果要使用不在PATH中的python版本,則應(yīng)指options.pythonPath
需要有node環(huán)境,安裝相關(guān)包。
一. NodeJS的特點(diǎn)
我們先來(lái)看看NodeJS官網(wǎng)上的介紹:
Node.js?is a platform built on Chrome’s?JavaScript?runtime for easily building fast, scalable network applications.?node.js?uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.
其特點(diǎn)為:
1. 它是一個(gè)Javascript運(yùn)行環(huán)境
2. 依賴于Chrome V8引擎進(jìn)行代碼解釋
3. 事件驅(qū)動(dòng)
4. 非阻塞I/O
5. 輕量、可伸縮,適于實(shí)時(shí)數(shù)據(jù)交互應(yīng)用
6. 單進(jìn)程,單線程
二. NodeJS帶來(lái)的對(duì)系統(tǒng)瓶頸的解決方案
它的出現(xiàn)確實(shí)能為我們解決現(xiàn)實(shí)當(dāng)中系統(tǒng)瓶頸提供了新的思路和方案,下面我們看看它能解決什么問(wèn)題。
1. 并發(fā)連接
舉個(gè)例子,想象一個(gè)場(chǎng)景,我們?cè)阢y行排隊(duì)辦理業(yè)務(wù),我們看看下面兩個(gè)模型。
(1)系統(tǒng)線程模型:
這種模型的問(wèn)題顯而易見(jiàn),服務(wù)端只有一個(gè)線程,并發(fā)請(qǐng)求(用戶)到達(dá)只能處理一個(gè),其余的要先等待,這就是阻塞,正在享受服務(wù)的請(qǐng)求阻塞后面的請(qǐng)求了。
(2)多線程、線程池模型:
這個(gè)模型已經(jīng)比上一個(gè)有所進(jìn)步,它調(diào)節(jié)服務(wù)端線程的數(shù)量來(lái)提高對(duì)并發(fā)請(qǐng)求的接收和響應(yīng),但并發(fā)量高的時(shí)候,請(qǐng)求仍然需要等待,它有個(gè)更嚴(yán)重的問(wèn)題。到代碼層面上來(lái)講,我們看看客戶端請(qǐng)求與服務(wù)端通訊的過(guò)程:
服務(wù)端與客戶端每建立一個(gè)連接,都要為這個(gè)連接分配一套配套的資源,主要體現(xiàn)為系統(tǒng)內(nèi)存資源,以PHP為例,維護(hù)一個(gè)連接可能需要20M的內(nèi)存。這就是為什么一般并發(fā)量一大,就需要多開(kāi)服務(wù)器。
那么NodeJS是怎么解決這個(gè)問(wèn)題的呢?我們來(lái)看另外一個(gè)模型,想象一下我們?cè)诳觳偷挈c(diǎn)餐吃飯的場(chǎng)景。
(3)異步、事件驅(qū)動(dòng)模型
我們同樣是要發(fā)起請(qǐng)求,等待服務(wù)器端響應(yīng);但是與銀行例子不同的是,這次我們點(diǎn)完餐后拿到了一個(gè)號(hào)碼,拿到號(hào)碼,我們往往會(huì)在位置上等待,而在我們后面的請(qǐng)求會(huì)繼續(xù)得到處理,同樣是拿了一個(gè)號(hào)碼然后到一旁等待,接待員能一直進(jìn)行處理。
等到飯菜做號(hào)了,會(huì)喊號(hào)碼,我們拿到了自己的飯菜,進(jìn)行后續(xù)的處理(吃飯)。這個(gè)喊號(hào)碼的動(dòng)作在NodeJS中叫做回調(diào)(Callback),能在事件(燒菜,I/O)處理完成后繼續(xù)執(zhí)行后面的邏輯(吃飯),這體現(xiàn)了NodeJS的顯著特點(diǎn),異步機(jī)制、事件驅(qū)動(dòng)整個(gè)過(guò)程沒(méi)有阻塞新用戶的連接(點(diǎn)餐),也不需要維護(hù)已經(jīng)點(diǎn)餐的用戶與廚師的連接。
基于這樣的機(jī)制,理論上陸續(xù)有用戶請(qǐng)求連接,NodeJS都可以進(jìn)行響應(yīng),因此NodeJS能支持比Java、PHP程序更高的并發(fā)量雖然維護(hù)事件隊(duì)列也需要成本,再由于NodeJS是單線程,事件隊(duì)列越長(zhǎng),得到響應(yīng)的時(shí)間就越長(zhǎng),并發(fā)量上去還是會(huì)力不從心。
總結(jié)一下NodeJS是怎么解決并發(fā)連接這個(gè)問(wèn)題的:更改連接到服務(wù)器的方式,每個(gè)連接發(fā)射(emit)一個(gè)在NodeJS引擎進(jìn)程中運(yùn)行的事件(Event),放進(jìn)事件隊(duì)列當(dāng)中,而不是為每個(gè)連接生成一個(gè)新的OS線程(并為其分配一些配套內(nèi)存)。
2. I/O阻塞
NodeJS解決的另外一個(gè)問(wèn)題是I/O阻塞,看看這樣的業(yè)務(wù)場(chǎng)景:需要從多個(gè)數(shù)據(jù)源拉取數(shù)據(jù),然后進(jìn)行處理。
(1)串行獲取數(shù)據(jù),這是我們一般的解決方案,以PHP為例
假如獲取profile和timeline操作各需要1S,那么串行獲取就需要2S。
(2)NodeJS非阻塞I/O,發(fā)射/監(jiān)聽(tīng)事件來(lái)控制執(zhí)行過(guò)程
NodeJS遇到I/O事件會(huì)創(chuàng)建一個(gè)線程去執(zhí)行,然后主線程會(huì)繼續(xù)往下執(zhí)行的,因此,拿profile的動(dòng)作觸發(fā)一個(gè)I/O事件,馬上就會(huì)執(zhí)行拿timeline的動(dòng)作,兩個(gè)動(dòng)作并行執(zhí)行,假如各需要1S,那么總的時(shí)間也就是1S。它們的I/O操作執(zhí)行完成后,發(fā)射一個(gè)事件,profile和timeline,事件代理接收后繼續(xù)往下執(zhí)行后面的邏輯,這就是NodeJS非阻塞I/O的特點(diǎn)。
總結(jié)一下:Java、PHP也有辦法實(shí)現(xiàn)并行請(qǐng)求(子線程),但NodeJS通過(guò)回調(diào)函數(shù)(Callback)和異步機(jī)制會(huì)做得很自然。
三. NodeJS的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):1. 高并發(fā)(最重要的優(yōu)點(diǎn))
2. 適合I/O密集型應(yīng)用
缺點(diǎn):1. 不適合CPU密集型應(yīng)用;CPU密集型應(yīng)用給Node帶來(lái)的挑戰(zhàn)主要是:由于JavaScript單線程的原因,如果有長(zhǎng)時(shí)間運(yùn)行的計(jì)算(比如大循環(huán)),將會(huì)導(dǎo)致CPU時(shí)間片不能釋放,使得后續(xù)I/O無(wú)法發(fā)起;
解決方案:分解大型運(yùn)算任務(wù)為多個(gè)小任務(wù),使得運(yùn)算能夠適時(shí)釋放,不阻塞I/O調(diào)用的發(fā)起;
2. 只支持單核CPU,不能充分利用CPU
3. 可靠性低,一旦代碼某個(gè)環(huán)節(jié)崩潰,整個(gè)系統(tǒng)都崩潰
原因:?jiǎn)芜M(jìn)程,單線程
解決方案:(1)Nnigx反向代理,負(fù)載均衡,開(kāi)多個(gè)進(jìn)程,綁定多個(gè)端口;
(2)開(kāi)多個(gè)進(jìn)程監(jiān)聽(tīng)同一個(gè)端口,使用cluster模塊;
4. 開(kāi)源組件庫(kù)質(zhì)量參差不齊,更新快,向下不兼容
5. Debug不方便,錯(cuò)誤沒(méi)有stack trace
四. 適合NodeJS的場(chǎng)景
1. RESTful API
這是NodeJS最理想的應(yīng)用場(chǎng)景,可以處理數(shù)萬(wàn)條連接,本身沒(méi)有太多的邏輯,只需要請(qǐng)求API,組織數(shù)據(jù)進(jìn)行返回即可。它本質(zhì)上只是從某個(gè)數(shù)據(jù)庫(kù)中查找一些值并將它們組成一個(gè)響應(yīng)。由于響應(yīng)是少量文本,入站請(qǐng)求也是少量的文本,因此流量不高,一臺(tái)機(jī)器甚至也可以處理最繁忙的公司的API需求。
2. 統(tǒng)一Web應(yīng)用的UI層
目前MVC的架構(gòu),在某種意義上來(lái)說(shuō),Web開(kāi)發(fā)有兩個(gè)UI層,一個(gè)是在瀏覽器里面我們最終看到的,另一個(gè)在server端,負(fù)責(zé)生成和拼接頁(yè)面。
不討論這種架構(gòu)是好是壞,但是有另外一種實(shí)踐,面向服務(wù)的架構(gòu),更好的做前后端的依賴分離。如果所有的關(guān)鍵業(yè)務(wù)邏輯都封裝成REST調(diào)用,就意味著在上層只需要考慮如何用這些REST接口構(gòu)建具體的應(yīng)用。那些后端程序員們根本不操心具體數(shù)據(jù)是如何從一個(gè)頁(yè)面?zhèn)鬟f到另一個(gè)頁(yè)面的,他們也不用管用戶數(shù)據(jù)更新是通過(guò)Ajax異步獲取的還是通過(guò)刷新頁(yè)面。
3. 大量Ajax請(qǐng)求的應(yīng)用
例如個(gè)性化應(yīng)用,每個(gè)用戶看到的頁(yè)面都不一樣,緩存失效,需要在頁(yè)面加載的時(shí)候發(fā)起Ajax請(qǐng)求,NodeJS能響應(yīng)大量的并發(fā)請(qǐng)求。總而言之,NodeJS適合運(yùn)用在高并發(fā)、I/O密集、少量業(yè)務(wù)邏輯的場(chǎng)景。
Python的優(yōu)缺點(diǎn)
優(yōu)點(diǎn)
簡(jiǎn)單————Python是一種代表簡(jiǎn)單主義思想的語(yǔ)言。閱讀一個(gè)良好的Python程序就感覺(jué)像是在讀英語(yǔ)一樣,盡管這個(gè)英語(yǔ)的要求非常嚴(yán)格!Python的這種偽代碼本質(zhì)是它最大的優(yōu)點(diǎn)之一。它使你能夠?qū)W⒂诮鉀Q問(wèn)題而不是去搞明白語(yǔ)言本身。
易學(xué)————就如同你即將看到的一樣,Python極其容易上手。前面已經(jīng)提到了,Python有極其簡(jiǎn)單的語(yǔ)法。
免費(fèi)、開(kāi)源————Python是FLOSS(自由/開(kāi)放源碼軟件)之一。簡(jiǎn)單地說(shuō),你可以自由地發(fā)布這個(gè)軟件的拷貝、閱讀它的源代碼、對(duì)它做改動(dòng)、把它的一部分用于新的自由軟件中。FLOSS是基于一個(gè)團(tuán)體分享知識(shí)的概念。這是為什么Python如此優(yōu)秀的原因之一——它是由一群希望看到一個(gè)更加優(yōu)秀的Python的人創(chuàng)造并經(jīng)常改進(jìn)著的。
高層語(yǔ)言————當(dāng)你用Python語(yǔ)言編寫(xiě)程序的時(shí)候,你無(wú)需考慮諸如如何管理你的程序使用的內(nèi)存一類的底層細(xì)節(jié)。
可移植性————由于它的開(kāi)源本質(zhì),Python已經(jīng)被移植在許多平臺(tái)上(經(jīng)過(guò)改動(dòng)使它能夠工作在不同平臺(tái)上)。如果你小心地避免使用依賴于系統(tǒng)的特性,那么你的所有Python程序無(wú)需修改就可以在下述任何平臺(tái)上面運(yùn)行。這些平臺(tái)包括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開(kāi)發(fā)的Android平臺(tái)!
解釋性————這一點(diǎn)需要一些解釋。一個(gè)用編譯性語(yǔ)言比如C或C++寫(xiě)的程序可以從源文件(即C或C++語(yǔ)言)轉(zhuǎn)換到一個(gè)你的計(jì)算機(jī)使用的語(yǔ)言(二進(jìn)制代碼,即0和1)。這個(gè)過(guò)程通過(guò)編譯器和不同的標(biāo)記、選項(xiàng)完成。當(dāng)你運(yùn)行你的程序的時(shí)候,連接/轉(zhuǎn)載器軟件把你的程序從硬盤復(fù)制到內(nèi)存中并且運(yùn)行。而Python語(yǔ)言寫(xiě)的程序不需要編譯成二進(jìn)制代碼。你可以直接從源代碼 運(yùn)行 程序。在計(jì)算機(jī)內(nèi)部,Python解釋器把源代碼轉(zhuǎn)換成稱為字節(jié)碼的中間形式,然后再把它翻譯成計(jì)算機(jī)使用的機(jī)器語(yǔ)言并運(yùn)行。事實(shí)上,由于你不再需要擔(dān)心如何編譯程序,如何確保連接轉(zhuǎn)載正確的庫(kù)等等,所有這一切使得使用Python更加簡(jiǎn)單。由于你只需要把你的Python程序拷貝到另外一臺(tái)計(jì)算機(jī)上,它就可以工作了,這也使得你的Python程序更加易于移植。
面向?qū)ο蟆狿ython既支持面向過(guò)程的編程也支持面向?qū)ο蟮木幊獭T凇懊嫦蜻^(guò)程”的語(yǔ)言中,程序是由過(guò)程或僅僅是可重用代碼的函數(shù)構(gòu)建起來(lái)的。在“面向?qū)ο蟆钡恼Z(yǔ)言中,程序是由數(shù)據(jù)和功能組合而成的對(duì)象構(gòu)建起來(lái)的。與其他主要的語(yǔ)言如C++和Java相比,Python以一種非常強(qiáng)大又簡(jiǎn)單的方式實(shí)現(xiàn)面向?qū)ο缶幊獭?/p>
可擴(kuò)展性————如果你需要你的一段關(guān)鍵代碼運(yùn)行得更快或者希望某些算法不公開(kāi),你可以把你的部分程序用C或C++編寫(xiě),然后在你的Python程序中使用它們。
可嵌入性————你可以把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。
豐富的庫(kù)————Python標(biāo)準(zhǔn)庫(kù)確實(shí)很龐大。它可以幫助你處理各種工作,包括正則表達(dá)式、文檔生成、單元測(cè)試、線程、數(shù)據(jù)庫(kù)、網(wǎng)頁(yè)瀏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV文件、密碼系統(tǒng)、GUI(圖形用戶界面)、Tk和其他與系統(tǒng)有關(guān)的操作。記住,只要安裝了Python,所有這些功能都是可用的。這被稱作Python的“功能齊全”理念。除了標(biāo)準(zhǔn)庫(kù)以外,還有許多其他高質(zhì)量的庫(kù),如wxPython、Twisted和Python圖像庫(kù)等等。
概括————Python確實(shí)是一種十分精彩又強(qiáng)大的語(yǔ)言。它合理地結(jié)合了高性能與使得編寫(xiě)程序簡(jiǎn)單有趣的特色。
規(guī)范的代碼————Python采用強(qiáng)制縮進(jìn)的方式使得代碼具有極佳的可讀性。
缺點(diǎn)
強(qiáng)制縮進(jìn)
這也許不應(yīng)該被稱為局限,但是它用縮進(jìn)來(lái)區(qū)分語(yǔ)句關(guān)系的方式還是給很多初學(xué)者帶來(lái)了困惑。即便是很有經(jīng)驗(yàn)的Python程序員,也可能陷入陷阱當(dāng)中。最常見(jiàn)的情況是tab和空格的混用會(huì)導(dǎo)致錯(cuò)誤,而這是用肉眼無(wú)法分別的。
單行語(yǔ)句和命令行輸出問(wèn)題
很多時(shí)候不能將程序連寫(xiě)成一行,如import sys;for i in sys.path:print i。而perl和awk就無(wú)此限制,可以較為方便的在shell下完成簡(jiǎn)單程序,不需要如Python一樣,必須將程序?qū)懭胍粋€(gè).py文件。(對(duì)很多用戶而言這也不算是限制)
NO.1 運(yùn)行速度,有速度要求的話,用C++改寫(xiě)關(guān)鍵部分吧。
NO.2 國(guó)內(nèi)市場(chǎng)較小(國(guó)內(nèi)以python來(lái)做主要開(kāi)發(fā)的,目前只有一些?web2.0公司)。但時(shí)間推移,目前很多國(guó)內(nèi)軟件公司,尤其是游戲公司,也開(kāi)始規(guī)模使用他。
No.3 中文資料匱乏(好的python中文資料屈指可數(shù))。托社區(qū)的福,有幾本優(yōu)秀的教材已經(jīng)被翻譯了,但入門級(jí)教材多,高級(jí)內(nèi)容還是只能看英語(yǔ)版。
NO.4 構(gòu)架選擇太多(沒(méi)有像C#這樣的官方.net構(gòu)架,也沒(méi)有像ruby由于歷史較短,構(gòu)架開(kāi)發(fā)的相對(duì)集中。Ruby on Rails 構(gòu)架開(kāi)發(fā)中小型web程序天下無(wú)敵)。不過(guò)這也從另一個(gè)側(cè)面說(shuō)明,python比較優(yōu)秀,吸引的人才多,項(xiàng)目也多。
網(wǎng)站題目:node函數(shù)python,node方法
本文路徑:http://chinadenli.net/article46/dseoihg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、App設(shè)計(jì)、網(wǎng)站改版、域名注冊(cè)、虛擬主機(jī)、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)