Python動態強型別解釋型語言原理解析

2022-09-26 00:54:11 字數 2385 閱讀 5144

python是一門動態解釋性的強型別定義語言:編寫時無需定義變數型別;執行時變數型別強制固定;無需編譯,在直譯器環境直接執行。

動態和靜態

靜態語言:是指在編譯時變數的資料型別即可確定的語言,多數靜態型別語言要求在使用變數之前必須宣告資料型別。例如:c++、j**a、delphi、c# 、go等。

動態語言:是在執行時確定資料型別的語言。變數使用之前不需要型別宣告,通常變數的型別是被賦值的那個值的型別。例如:python、ruby、perl等。

強型別和弱型別

強型別和弱型別主要是站在變數型別處理的角度進行分類的。

強型別是指不允許隱式變數型別轉換,弱型別則允許隱式型別轉換。

所以,關鍵在於變數資料型別的轉換。

什麼叫隱式型別轉換?

隱式是指原始碼中沒有明顯的型別轉換**,也就是說,乙個變數,你可以直接給他賦值字串,也可以直接給他賦值數值,你還可以直接讓字串型別的變數和數值型別的變數相加,雖然得出的最終結果未必是你想象的那樣,但一定不會報錯。

這就是隱式型別轉換,弱型別語言,如j**ascript、php。

j**a是強型別語言,不允許隱式型別轉換,也就是說,如果你需要拿乙個字串變數當做整型來用,你必須顯式地將變數型別轉換好。

換句話說:

優點:python的定位是「優雅」、「明確」、「簡單」,所以python程式看上去總是簡單易懂,初學者學python,不但入門容易,而且將來深入下去,可以編寫那些非常非常複雜的程式。

開發效率非常高,python有非常強大的第三方庫,基本上你想通過計算機實現任何功能,python官方庫里都有相應的模組進行支援,直接**呼叫後,在基礎庫的基礎上再進行開發,大大降低開發周期,避免重複造輪子。

缺點:速度慢,python 的執行速度相比c語言確實慢很多,跟j**a相比也要慢一些,因此這也是很多所謂的大牛不屑於使用python的主要原因,但其實這裡所指的執行速度慢在大多數情況下使用者是無法直接感知到的,必須借助測試工具才能體現出來,比如你用c運乙個程式花了0.01s,用python是0.1s,這樣c語言直接比python快了10倍,算是非常誇張了,但是你是無法直接通過肉眼感知的,因為乙個正常人所能感知的時間最小單位是0.15-0.4s左右,哈哈。其實在大多數情況下python已經完全可以滿足你對程式速度的要求,除非你要寫對速度要求極高的搜尋引擎等,這種情況下,當然還是建議你用c去實現的。

**不能加密,因為python是解釋性語言,它的原始碼都是以名文形式存放的,不過我不認為這算是乙個缺點,如果你的專案要求源**必須是加密的,那你一開始就不應該用python來去實現。

執行緒不能利用多cpu問題,這是python被人詬病最多的乙個缺點,gil即全域性直譯器鎖(global interpreter lock),是計算機程式語言直譯器用於同步執行緒的工具,使得任何時刻僅有乙個執行緒在執行,python的執行緒是www.cppcns.com作業系統的原生執行緒。在linux上為pthread,在windows上為win thread,完全由作業系統排程執行緒的執行。乙個python直譯器程序內有一條主線程,以及多條使用者程式的執行執行緒。即使在多核cpu平台上,由於gil的存在,所以禁止多執行緒的並行執行。關於這個問題的折衷解決方法,我們在以後執行緒和程序章節裡再進行詳細**。

區別:

個人認為,j**a是解釋型的語言,因為雖然j**a也需要編譯,編譯成.class檔案,但是並不是機器可以識別的語言,而是位元組碼,最終還是需要 jvm的解釋,才能在各個平台執行,這同時也是j**a跨平台的原因。所以可是說j**a即是編譯型的,也是解釋型,但是假如非要歸類的話,從概念上的定義,恐怕j**a應該歸到解釋型的語言中。

附:

編譯型語言要先編譯再執行,而解釋性語言直接「執行」源**。

python是種強型別的語言。

有人可能會問,在python中,可以這樣寫而不報錯,所以是弱型別的:

i=1print(i)

i="hello wo"

print(i)

實際上,這裡python表現出的特性為,他是一種動態型別語言。動態型別語言是一種在執行期間才去確定資料型別的語言,與靜態型別相反。

vbscript 和 python 是動態型別的,因為它們確定乙個變數的型別是在您第一次給它賦值的時候。靜態型別語言是一種在編譯期間就確定資料型別的語言。大多數靜態型別語言是通過要求在使用任一變數之前宣告其資料型別來保證這一點的。j**a 和 c 是靜態型別語言。

python 是強制型別定義的。指的是加入我們有乙個整數,如果不明確地進行轉換 ,不能將把它當成乙個字串,所以顯然,c/c++和j**a都是強型別語言。 弱型別語言與強型別相反。vbscript 是弱型別的。在 vbscript 中,程式設計客棧我們可以將字串 '12' 和整數 3 進行連線得到字串'123',然後可以把它看成整數 123 ,所有這些都不需要任何的顯示轉換。

總結起來,python是一種動態的,強型別語言。

本文標題: python動態強型別解釋型語言原理解析

本文位址:

python是一門動態解釋性強型別定義語言

優點 1 簡單易入門 2 非常強大的第三方庫,開發效率高 3 高階語言,不需要考慮底層的細節 4 開源,可移植性高 5 可擴充套件性高,關鍵的不想公開的東西可以用c或者c 寫,然後在python 中使用 6 可嵌入性,可以將python嵌入到c c 提供指令碼功能 缺點 1 速度慢 2 不能加密 3...

python動態性強型別用法例項

python變數宣告和定義 與c 不同,python在使用變數之前無須定義它的型別,試著執行下面的例子 i 12 print i 從上邊我們可以看到,變數 i 在使用前並不需要定義,但是必須宣告以及初始化該變數。試著執行下面的例子 i 1 print i j 上面的 會產生乙個異常 nameerro...

強型別,弱型別,靜態型別,動態型別的區別

型別系統的一些概念,眾說紛紜,使用上也比較亂。有些東西,甚至不好嚴格定義。以下算學術界的一種相對 嚴格 的說法。首先了解一下基本概念 有了上面的概念,再討論強 弱型別,靜態 動態型別 偏向於不容忍隱式型別轉換,弱型別相對于強型別來說型別檢查更不嚴格,比如說允許變數型別的隱式轉換,允許強制型別轉換等等...