python變數宣告和定義
與c#不同,python在使用變數之前無須定義它的型別,試著執行下面的例子:
i = 12 print i
從上邊我們可以看到,變數 i 在使用前並不需要定義,但是必須宣告以及初始化該變數。試著執行下面的例子:
i = 1
print i + j
上面的**會產生乙個異常:「nameerror: name 'j' is not defined」,python提示變數 j 沒有定義。這點和basic等弱型別的語言不一樣。在basic中,執行上述**的時候不會產生異常,你可以在excel的v程式設計客棧ba開發環境裡試一下,把 p程式設計客棧rint改為msgbox就可以,結果會輸出 1 。這說明python並不是一種類似basic的弱型別語言。
另一方面www.cppcns.com,python與c#有乙個很大的差異就是在程式執行過程中,同一變數名可以(在不同階段)代表不同型別的資料,看看下邊的例子:
i = 1
print i,type(i),id(i)
i = 10000000000
print i,type(i),id(i)
i = 1.1
print i,type(i),id(i)
變數 i 的型別在程式執行過程中分別經歷了int、long和float的變化,這和靜態型別語言(如c等)有很大不同。靜態mcrlqtr語言只要乙個變數獲得了乙個資料類 型,它就會一直是這個型別,變數名代表的是用來存放資料的記憶體位置。而python中使用的變數名只是各種資料及物件的引用,用id()獲取的才是存放數 據的記憶體位置,我們mcrlqtr輸入的1、10000000000和1.1三個資料均會儲存在id()所指示的這些記憶體位置中,直到垃圾**車把它拉走(在系統確定你 不再使用它的時候)。這是動態語言的典型特徵,它確定乙個變數的型別是在給它賦值的時候。
另一方面,python又是強型別的,試著執行下邊的例子:
# -*- coding: utf-8 -*-
i = 10; j = 'ss'
print i+j
#正確的寫法是print str(i)+j,輸出10ss
會產生乙個異常:「typeerror: unsupported operand type(s) for +: 'int' and 'str'」。在basic等弱型別的語言中,上邊的例子會正常執行並返回(雖然有時候是不可預期的)結果。
所以,我們說python既是一種動態型別語言,同時也是一種強型別的語言,這點是和c#不同的地方。對於python的這種變數的宣告、定義和使 用方式,c#程式設計師可能要花一段時間去適應,不過相信你會很快就喜歡上它,因為它讓事情變得更加簡單(而且不會不安全)。而且,c# 4.0 已經開始用類似的方式定義和使用變數(通過在變數名前加關鍵字dynamic),如果你先學了python變數,將能夠更快的適應c# 4.0的動態程式設計特徵。
本文標題: python動態性強型別用法例項
本文位址:
python是一門動態解釋性強型別定義語言
優點 1 簡單易入門 2 非常強大的第三方庫,開發效率高 3 高階語言,不需要考慮底層的細節 4 開源,可移植性高 5 可擴充套件性高,關鍵的不想公開的東西可以用c或者c 寫,然後在python 中使用 6 可嵌入性,可以將python嵌入到c c 提供指令碼功能 缺點 1 速度慢 2 不能加密 3...
強型別,弱型別,靜態型別,動態型別的區別
型別系統的一些概念,眾說紛紜,使用上也比較亂。有些東西,甚至不好嚴格定義。以下算學術界的一種相對 嚴格 的說法。首先了解一下基本概念 有了上面的概念,再討論強 弱型別,靜態 動態型別 偏向於不容忍隱式型別轉換,弱型別相對于強型別來說型別檢查更不嚴格,比如說允許變數型別的隱式轉換,允許強制型別轉換等等...
強型別與弱型別,靜態型別和動態型別
首先強弱是相對的。強型別 每個變數和物件都必須宣告型別,在編譯時確定好型別了,執行時不能更改。偏向於不容忍隱式型別轉換。譬如說haskell的int就不能變成double。弱型別 編譯時不確定型別,執行時根據語義確定是哪種型別。通俗地說,弱型別偏向於容忍隱式轉換,把不同型別的變數放在一起運算。靜態型...