pythonjit
java和python都是一種面向對象的語言。
Java是一種面向對象的語言,有著和C/C++近似的語法。它是動態鏈接,允許新的代碼在運行時載入與運行,而不是動態類型的。Java的演變相對較慢,最近才合並了一些功能用以支持函數式編程。相對的這種語言和VM的哲學都是將向後兼容作為首要指令。
Python是完全面向對象的語言。函數、模塊、數字、字元串都是對象。而且完全支持繼承、重載、派生、多繼承,有益於增強源代碼的復用性。Python是建立一個可擴展的對象模型的常用語言。用於面向對象的設計並不意味著開發者用Python寫代碼時最常用的風格就是面向對象的風格,它同樣支持過程式編程,模塊化編程和某些方面的函數式編程。
想了解更多有關Java和Python的詳情,推薦咨詢達內教育。達內教育擁有1v1督學跟蹤式學習有疑問隨時溝通,企業級項目,課程穿插大廠真實項目講解,對標企業人才標准制定專業學習計劃,囊括主流熱點技術,理論知識+學習思維+實戰操作,打造完整學習閉環。達內教育實戰講師、經驗豐富、多種班型供學員選擇、獨創TTS8.0教學系統,滿足學生多樣化學習需求。感興趣的話點擊此處,免費學習一下
2. Python在科學計算中和C比較,性能差距大嗎
Python在科學計算中和C比較,性能差距大嗎
numpy/scipy底層都是純C的,性能不會比matlab差。scikit-learn, genism等都是建立在numpy/scipy之上。python只是提供了一個膠水層。另外純python部分也可以再用pypy jit一下,性能相當可觀
3. Python是一門怎樣的編程語言
編程語言主要分為編譯型和解釋型,靜態語言和動態語言,強類型和弱類型,混合語言等。
編譯型語言:通過編譯器把源代碼編譯(compile)成機器語言,在經過鏈接(linker)將源代碼中所使用的庫串聯起來生成可執行二進制文件,這樣運行時 計算機可以直接以機器語言來運行程序。優點:運行效率高。缺點:編譯之後如果需要修改代碼需要重新編譯整個模塊。編譯的時候根據對應的運行環境生成機器碼,不同的操作系統之間移植就會有問題,需要根據運行的操作系統環境編譯不同的可執行文件,代表語言:C,C++,object-C等。
解釋型語言:不需要編譯,只在程序運行時才逐條翻譯成機器語言。優點:跨平台支持比較好,缺點:程序運行效率會比較慢。如:python,php,Perl等。
動態語言:動態類型語言,是指數據類型,結構(如對象,函數)的檢查是在運行時做的。用動態類型語言編程時,不用給變數指定數據類型,該語言會在你第一次賦值給變數時,在內部記錄數據類型,結構。在運行代碼時可以根據某些條件改變變數的數據類型,結構。也就是說在運行時代碼 可以根據某些條件改變自身結構,數據類型。代表語言:python,PHP,C#等。
靜態語言:靜態類型語言,是指數據類型,結構的檢查是在運行前(如編譯階段)做的,運行時結構不可變。代表語言:C,C++等。
強類型語言:如果某個變數的數據類型不經過強制轉換,該變數類型是不會改變的。
弱類型語言:變數可以根據賦值類型調整自身的數據類型。
混合型語言:既然編譯型和解釋型各有缺點就會有人想到把兩種類型整合起來,取其精華去其糟粕。就出現了半編譯型語言。比如C#,C#在編譯的時候不是直接編譯成機器碼而是中間碼,.NET平台提供了中間語言運行庫運行中間碼,中間語言運行庫類似於Java虛擬機。.net在編譯成IL代碼後,保存在dll中,首次運行時由JIT在編譯成機器碼緩存在內存中,下次直接執行。Java先生成位元組碼再在Java虛擬機中解釋執行。嚴格來說混合型語言屬於解釋型語言。C#更接近編譯型語言。
由此可知python語言是一門解釋,動態,弱類型語言。
相關推薦:《Python視頻教程》
python語言的優點:
1、python的定位是「優雅」、「明確」、「簡單」,所以python程序看上去總是簡單易懂,對於初學者容易入門。
2、開發效率高,python有非常強大的第三方庫,基本上你想通過計算機實現任何功能,python官方庫里都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上進行開發,大大降低開發周期,避免重復造輪子。
3、高級語言,當使用python語言編寫程序時,無需考慮如何管理內存等底層細節。
4、可移植性,由於它開源的本質,python已經被移植在許多平台上,如果你小心的避免使用依賴於系統特性,那麼你的所有python程序無需修改就幾乎可以在市場上所有的系統平台運行。
5、可擴展性,如果你需要你的一段關鍵代碼運行得更快或者希望某些演算法不公開,可以把部份程序用C或C++編寫庫,然後用python調用。
6、可嵌入式,可以把python嵌入到C/C++程序,從而向你的程序用戶提供腳本功能。
python語言的缺點:
1、速度慢,由於是解釋型所以運行速度相比編譯型語言要慢,跟Java相比也要慢一些。
2、代碼不能加密,因為python是解釋型語言,它的源碼都是以明文形式存放的,所以如果項目要求源代碼必須保密或者加密,那一開始就不應該考慮用python來實現。
3、強制縮進,單行語句不用寫分號對於習慣了C/C++用戶可能不是太習慣。
4、Python2與 Python3不兼容,因為Python沒有向後兼容,給所有的Python工程師帶來了煩惱。
4. 想要加速numpy,只需在原來編寫的python函數上面加@jit就可以嗎有沒有所謂的參數等
只需要在函數前使用單獨一行,加
@jit
但並不是所有的函數都有效,主要是針對以python代碼進行數學計算為主的函數。
5. python是哪個公司出的
是Google的吉多·范羅蘇姆設計的。
Python是一種跨平台的計算機程序設計語言。作為一種面向對象的動態類型語言,它最初設計用於編寫自動化腳本(shell)。隨著版本的更新和新的語言功能的增加,它越來越多地被用於獨立的、大規模的項目開發中。
python是一種表示簡單化的語言。讀一個好的python程序就像讀英語一樣。它使你能夠專注於解決問題,而不是理解語言本身。
然而,根據二八定律,大多數程序不需要高速。在某些速度要求很高的情況下,Python設計師傾向於使用JIT技術,或者用使用C/C++語言改寫這部分程序。可用的JIT技術是PyPy。
(5)pythonjit擴展閱讀:
Python的創始人為荷蘭人吉多·范羅蘇姆。1989年聖誕節期間,在阿姆斯特丹,Guido為了打發聖誕節的無趣,決心開發一個新的腳本解釋程序,作為ABC 語言的一種繼承。
Python使用與C、Java類似的運算符,支持整數與浮點數的數學運算。同時還支持復數運算與無窮位數(實際受限於計算機的能力)的整數運算。除了求絕對值函數abs()外,大多數數學函數處於math和cmath模塊內。前者用於實數運算,而後者用於復數運算。
6. Python幾種並發實現方案的性能比較
1.目前推薦使用gevent吧,當然,結合起python的jit技術實現,可突破gil的限制,pypy還是可觀的,內存上可能比cpython佔用大些
7. 誰說Python性能差的
[轉載]
最近看到網上有人對比Python,Shell腳本, C++,主要是拿Python性能說事,個人覺得意義不大。
一個語言有什麼性能問題呢,是背後的實現(標准庫,編譯器)決定著一切,就像總有人想對比c++和c的效率一樣。
還有就是,Python總被人叫做是腳本語言,其實腳本更多指的是批處理命令文件,是shell命令的集合,和python完全
不是一個層次。不同的工具所在層次不同,適用的問題也不同。把不同層次上的東西拉到一起做比較,什麼問題也說明不了。
另外,shell就知道fork,你說他還能幹嘛?:-)。
下面先亂侃一通,再以實例探討下Python的性能問題。
首先,Python是一門動態編程語言,主要亮點是可以提高開發應用的效率。 他是和Java,perl,Ruby等語言同類的。
是做系統集成,Web應用等系統的利器,最近在科學計算領域也是大方光彩(numpy, scipy, sci-kit learn)。
和C/Cplusplus基本不是一個層次的開發工具,他們是做底層系統(基礎庫,os,ecos就是c++寫的,還是用在嵌入式系統中)的,
很多庫提供的功能也很基礎。但,你可以為Python寫c或cpp的模塊,提高你的Python系統的整體性能。
其次,Python的主要解釋器CPython是用c語言實現的,不同類型(dict,list)和函數實現的演算法很不同。如果你的系統對性能很敏感,
那必須了解一些內幕,一個函數輸入不同的參數,性能可能相差很大。另外,Python解釋器執行Python代碼時候,大概經歷如下幾個階段:
1) 載入代碼文件 2)翻譯成AST 3)生成bytecode 4)在PVM(python virtual machine)上執行bytecode,PVM實際是一個基於棧的虛擬機。
其中,前3個階段看文件代碼量,一般就ms級別的消耗,如果你不想浪費,可以使用python -O -m py_compile xx.py命令,
將xx.py先編譯為xx.pyo的位元組碼,然後在調用python xx.pyo執行. PVM你可以簡單的想像為一個C語言寫的函數,裡面有一個非常大的switch,
根據不同的bytecode內容,執行不同的動作。比如遇到一個打開文件指令,這個函數就會調用libc的庫函數,執行c語言的打開文件操作。
其實很多操作python bytecode和c語言之間的性能差異很小的,因為Python的很多功能模塊就是直接執行C庫的。
再次,隨著Python的廣泛應用,CPython解釋器的性能問題確實越來越嚴重,特別是數據挖掘,機器學習領域的日趨火熱,其中很多優秀工具的實現
都是用Python來做的。為了解決這個問題,Python社區提出了多種不同的解釋器,比如針對數值計算的numba,用python實現的python解釋器pypy等。
他們的主要目的就是給Python加速,用到的技術有JIT,LLVM。比如numba為python提供了新的decorator,讓python函數能在運行時
通過llvm庫被翻譯成machine code。而CPython的現在主要的目的就變為一個Python解釋器的範本,就是提供一個穩定可靠的功能最全的解釋器實現參考。
另外,如果某個用Python實現的功能模塊的性能很關鍵,你可以把這個模塊先用Cython翻譯成C語言代碼,然後在編譯為可執行程序。當然用Cython,
你也可以在python中更加方便的調用外部C庫,保證整個系統的性能。所以,很多Python系統的執行會越來越快,但並不是Python快了,而是後面的支持
越來越強大了。
最後,Python就是和Java類似的一門語言,不要把他理解為是一種腳本。剛開始把他理解為腳本,可能是因為python提供了一個命令行工具,讓人可以輸入
python代碼,並立刻見到結果。其實,這只不過python給你提供的一個優秀的工具之一而已。Python在各個領域的使用越來越廣泛,開源資源也越來越多:
1. 大規模分布式計算disco,提供和hadoop類似的maprece模型 htt p:/ /discoprojec t.o rg/
2. 科學計算/可視化 numpy,scipy, matplotlib
3. 數據挖掘orange, sci-kit learn scikit-learn.sourceforg e.n et
4. Web開發 django project
所有IT領域,基本都能找到Python的痕跡。
說了這麼多,舉一個文本處理的例子,就是計算文本中第3列數據的和,來看看Python的功力,特別是性能方面的問題,
對比參考就是awk神器,其實拿awk做對比不是很公平,畢竟awk是優化再優化的工具(沒動力看他的實現,我猜的:)),
應該自己寫個c語言版本的。
樣本文件有1000萬行,格式如下:
data.txt:
d0 sp 0
d1 sp 1
d2 sp 2
d3 sp 3
d4 sp 4
d5 sp 5
d6 sp 6
d7 sp 7
d8 sp 8
d9 sp 9
先看awk的結果:
$ time cat data.txt |awk '{ sum+=$3} END {print sum}'
49976634308700
real 0m3.662s
user 0m3.576s
sys 0m0.240s
1000萬行3秒,效率果真高。
再看Python的,我做了四個版本。
Python代碼版本(1):
import sys
def data_sum():
datasum = 0
for line in sys.stdin:
raw = line.split()
datasum += int(raw[2],10)
print datasum
if __name__ == "__main__":
data_sum()
Python代碼版本(2):
import sys
def data_sum():
datasum = 0
for line in sys.stdin:
raw = line.split()
datasum += int(raw[2])
print datasum
if __name__ == "__main__":
data_sum()
Python代碼版本(3):
def data_sum():
datasum = 0
for line in sys.stdin:
datasum += int(『2』,10)
print datasum
if __name__ == "__main__":
data_sum()
Python代碼版本(4):
import sys
def data_sum():
datasum = 0
for line in sys.stdin:
raw = line.split()
print datasum
if __name__ == "__main__":
data_sum()
版本(1)執行結果:
首先將python代碼編譯成位元組碼,運行看看
$python -O -m py_compile datasum.py
$ time cat data.txt |python datasum.pyo
49976634308700
real 0m7.151s
user 0m7.088s
sys 0m0.192s
再試試直接運行python代碼
$ time cat data.txt |python datasum.py
49976634308700
real 0m7.323s
user 0m7.228s
sys 0m0.212s
兩種方法大概有個毫秒級別的差異,主要消耗在cpython把python代碼翻譯成ast階段,感興趣可以自己編譯一個cpython驗證下。
還有pypy,看看他的JIT和stackless效果如何。
$ time cat data.txt | pypy-c datasum.py
49976634308700
real 0m4.649s
user 0m4.556s
sys 0m0.224s
怎樣?比awk版本就慢了1秒鍾。我已經非常滿意了。下面再試試其他版本,順便看看到底Python慢在了哪裏。
版本(2):
$ time cat data.txt |python datasum.py
49976634308700
real 0m9.111s
user 0m9.025s
sys 0m0.220s
$ time cat data.txt | pypy-c datasum.py
49976634308700
real 0m4.694s
user 0m4.588s
sys 0m0.248s
版本(2)直接就比版本(1)慢了2秒。就差了一個base參數而已,原因看下Cpython的代碼就清楚了(Python/bltinmole.c)。
加了base的,直接調用: x = PyOS_strtol(s, &end, base);
不加base的,要通過PyNumber_Int等一列內部類型處理函數,最後到達PyOS_strtol。
版本(3):
$ time cat data.txt |python datasum.py
20000000
real 0m3.127s
user 0m3.044s
sys 0m0.188s
$ time cat data.txt | pypy-c datasum.py
20000000
real 0m2.393s
user 0m2.320s
sys 0m0.196s
版本(4):
$ time cat data.txt |python datasum.py
0
real 0m3.920s
user 0m3.852s
sys 0m0.180s
$ time cat data.txt | pypy-c datasum.py
0
real 0m3.324s
user 0m3.208s
sys 0m0.252s
通過對比版本(3)和版本(4)可以發現,Python主要慢在了split函數這裏,也就是提取第3列這個動作上。
初步想想,用C語言確實可以做到速度更快,但用Python沒想到什麼好辦法,正則表達式會更慢。
上面都是用Python的解釋器來執行代碼的,下面把版本(1)用Cython編譯成C語言,看看效果如何:
$ cython --embed -o datasum.c datasum.py
$ gcc -o datasum datasum.c -I/usr/include/python2.7 -lpython2.7
$ time cat data.txt |./datasum
49976634308700
real 0m6.332s
user 0m6.272s
sys 0m0.192s
比pypy還是慢了一些,pypy在代碼生成上有些優化,cython基本就是translate。
總結下就是:
Python是快速原型開發的利器,如果你對性能有要求,那麼就用他的各種優化他,Python不會辜負你的。
當你的領導/客戶給你很大的deadline壓力時候,Python就是你的救命草,呵呵。
當然,某些簡單功能,比如本文的例子,用awk就可以了嘛,幹嘛費力氣優化python,:-)。
8. 精通Python需要多長時間
我認為「精通」要滿足如下條件:
熟知主流硬體體系(x86, x64)
熟知 CPython 的具體實現,如若可能至少通讀源碼三遍以上
熟知每條 Python bytecode 如何被解釋執行
熟知每條 Python 語句如何 compile 成 bytecode
熟知 Python 主要數據結構所採用的優化手段
熟知 JIT 以及哪些場合下 PyPy 會比 CPython 有較大性能提高、以及有什麼代價
所以我一直只敢稱自己為 「中級 Pythonista」。對於那些僅僅知道怎麼用 Python 就敢自稱「精通」的人:專家不是那麼好當的,沒有金剛鑽別攬瓷器活。不懂那麼多底層細節就不要隨便說自己「精通」,說自己「擅長」不會被人看不起。
@米嘉 引用的 StackOverflow 上列的那幾項條件是作為將 Python 用於主要工作語言所需要的基本條件,敢於因此而稱自己「精通 Python」要讓不少人笑掉大牙。況且那幾項還有幾個嚴重問題:
第3點:如若可能,盡量避免 map/rece/fitler,而用 list/generator/set comprehension,代碼要清晰得多,GvR 如此說。xrange 和 range 的區別在 Python 3 中馬上就要滾蛋了,所以如非必要,不要大量使用 xrange。
第5點:敢於在 CPython 中大量使用遞歸是對 CPython 實現的公然侮辱。Python 的多個穩定實現都沒有 TCO,遞歸會讓性能迅速下降。記住一點:Python 中函數調用非常昂貴,可讀性、可維護性影響不大的情況下,能展開函數調用的時候盡量展開、遞歸能轉化成循環的盡量轉化。遞歸也不是人類自然的思考方式。
第7點:看書是對的,但不要把 Python 當作一門經典函數式語言對待,因為它不是。你當它是,它會很痛苦(「為毛要這樣濫用我!?」),你也會很痛苦(「為毛你不這樣實現 blah blah!?」)。SICP 是本好書,但不要因此而教條。要清楚的知道什麼時候用函數式,什麼時候用面向對象,什麼時候用面向過程,什麼時候用面向任務,什麼時候用面向結果。在一棵樹上弔死是大多數非理性死忠的表現。
9. python是個什麼東西
Python是一種跨平台的計算機程序設計語言。是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。最初被設計用於編寫自動化腳本(shell),隨著版本的不斷更新和語言新功能的添加,越多被用於獨立的、大型項目的開發。
Python的創始人為荷蘭人吉多·范羅蘇姆(GuidovanRossum)。1989年聖誕節期間,在阿姆斯特丹,Guido為了打發聖誕節的無趣,決心開發一個新的腳本解釋程序,作為ABC語言的一種繼承。
之所以選中Python(大蟒蛇的意思)作為該編程語言的名字,是取自英國20世紀70年代首播的電視喜劇《蒙提.派森的飛行馬戲團》(MontyPython'sFlyingCircus)。
(9)pythonjit擴展閱讀:
python中文就是蟒蛇的意思。在計算機中,它是一種編程語言。Python(英語發音:/ˈpaɪθən/),是一種面向對象、解釋型計算機程序設計語言,由GuidovanRossum於1989年底發明,第一個公開發行版發行於1991年。Python語法簡潔而清晰,具有豐富和強大的類庫。
它常被昵稱為膠水語言,它能夠把用其他語言製作的各種模塊(尤其是C/C++)很輕松地聯結在一起。常見的一種應用情形是,使用Python快速生成程序的原型(有時甚至是程序的最終界面),然後對其中有特別要求的部分,用更合適的語言改寫。
比如3D游戲中的圖形渲染模塊,性能要求特別高,就可以用C++重寫。1發展歷程編輯自從20世紀90年代初Python語言誕生至今,它逐漸被廣泛應用於處理系統管理任務和Web編程。Python已經成為最受歡迎的程序設計語言之一。
網路-Python
10. Python離JIT還有多遠
python追求的是編寫程序的效率(或者說是解決問題的方法實現的效率),而不是計算速度!
所以python到jit還相當遙遠!