當前位置:
首頁 > 最新 > Python和Scala的定義變數

Python和Scala的定義變數

每一門的編程語言背後都代表著某一種特別的哲學,由這一哲學進而設計出屬於這門程序語言的語法,Python和Scala也不例外。我們從變數的定義去一窺Python和Scala設計哲學的不同。

在Scala裡面變數可以分為兩種,分別是var和val,var在它的生命周期是可以不斷被賦值的,而val一旦定義便無法改變。

我們可以在REPL里簡單的測試下:

第一步中我們定義了var的變數a=1,a再下一步中可以變成a=2。但是如果我們定義的a是val,我們再賦值a=2時,Scala會拋出錯誤。讓我們再看看Python的變數,Python的變數都是Scala里的var,在它的生命周期都是可以被賦值的。

好的,我們不應該滿足於簡單的var和val,讓我們再深入的看看Scala的變數還返回了什麼有趣的東西。前一篇文章中,我們提到了類型推斷,這一次借著定義變數再看看它是怎麼運行的。首先先簡單定義一個val的變數

而它完整的定義a應該是這樣的:

前文也說過Scala是一門靜態語言,但是我們卻不需要像C或者Java一樣必須預先定義數據類型(比如上例中的Int類型),可以把數據類型的定義交由Scala的編譯器。把val a:Int = 1簡化成了val a = 1。在這一點很Python很像,都是「Simple is better than complex.」。再多一些例子體會Scala的類型推斷的強大。

Python作為一門動態語言擁有著在檢查變數類型的能力,而無需預定義。

值得注意的是PEP 526(已經在Python3.6版本執行了)提出了Type Hint,可以使用如下的方式:

表明my_var是int類型,但是並不像Scala一樣會做強制的類型檢查,這個僅僅只是一個提示。對於Type Hint的引進,極大地方便了工程化,而且也沒有影響Python的動態特性。當然,雖然兩者看起來類似,但是我們應該了解Scala的類型推斷是在編譯期處理的,而Python是在運行時檢查類型,實際上是兩種不同的處理技術,不能混為一談。

我們從變數這一點發現了到Scala追求的是Scalable的,擁有著var和val兩種變數的定義方式,而Python是「There should be one-- and preferably only one --obvious way to do it.」,只要var即可,val略顯多餘。

"閱後甜點"

最後的最後,簡單來看看在REPL里的換行就好了:

Scala是直接按回車鍵,就會出現符號|,然後可以繼續輸入了。

Python還需要你輸入一個,這樣才能換行輸入。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

深入Python流程式控制制,哪些你經常犯錯的知識
Python如何入門?

TAG:Python |