From 028a339edb96cefecbf7c02bba1fb073baa96560 Mon Sep 17 00:00:00 2001 From: Alan Wang <44191076+alankrantas@users.noreply.github.com> Date: Mon, 8 Feb 2021 17:46:39 +0800 Subject: [PATCH] Update learn-python-on-microbit-zh.md --- guide/learn-python-on-microbit-zh.md | 31 ++++++++++++++++++---------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/guide/learn-python-on-microbit-zh.md b/guide/learn-python-on-microbit-zh.md index b356f29..d5b2c9d 100644 --- a/guide/learn-python-on-microbit-zh.md +++ b/guide/learn-python-on-microbit-zh.md @@ -1,4 +1,4 @@ -# 在 BBC micro:bit 上學 Python +# 用 BBC micro:bit 學 Python:免費、免安裝的完全入門指南 作:Alan Wang, Feb 2021 @@ -265,13 +265,26 @@ NameError: name 'a' isn't defined ### Python 變數是個「路牌」 -現在要來講一個比較難懂、但仍然非常重要的觀念,因為這能解釋 Python 變數在賦值時的極大彈性。 +現在要來講一個比較難懂、但仍然非常重要的觀念,因為這能解釋 Python 變數在賦值時的獨特特性。 -在許多程式語言中,變數是個容器,實際上就是記憶體裡的一個空間,然後把值存在那裡面。既然是事先指定的空間,你只能用它來儲存特定類型的資料。 +在許多程式語言中,變數是個容器,實際上就是記憶體裡的一個空間,然後把值存在那裡面。既然是事先指定的空間,你只能用它來儲存特定類型的資料。但 Python 的做法卻剛好相反:值本身已經存在於記憶體中某處了,你所做的其實是做一個「路牌」來指向它。 -但 Python 的做法卻剛好相反:值本身已經存在於記憶體中某處了,你所做的其實是做一個「路牌」來指向它。 +以 ```a = 1``` 為例,整數 1 其實已經存在於記憶體內,我們只是新增一個名稱 a 來代表它: -以 ```a = 1``` 為例,整數 1 其實已經存在於記憶體內,我們只是新增一個名稱 a 來代表它。而當你執行 ```a = 2``` 時,路牌 a 會指向記憶體中的整數 2。這時整數 1 仍然存在,只是除了直接寫出 1 以外,我們沒有別的方式能引用 1。換言之,變數可以指向任何資料,就算途中改變資料的類型也無謂: +``` +a ---> 1 +``` + +而當你執行 ```a = 2``` 時,路牌 a 會指向記憶體中的整數 2。這時整數 1 仍然存在,只是除了直接寫出 1 以外,我們沒有別的方式能引用 1。 + +``` + 1 +a ---> 2 +``` + +> 整數 1 和 2 等等是特例,它們是 Python 一開始就擁有的資料。有些資料則是由使用者在執行程式期間建立的。 + +換言之,變數可以任意指向任何資料,就算途中改變資料的類型也無謂: ``` >>> a = 1 @@ -282,9 +295,7 @@ NameError: name 'a' isn't defined 'test' ``` -上面 a 一開始是整數,後來變成字串了。事實上 Python 變數可以指向各種東西,其彈性 - -> 當然,整數 1 和 2 等等是特例,它們是 Python 一開始就擁有的資料。有些資料是由使用者在執行程式期間建立的。這些資料 +上面 a 一開始是整數,後來變成字串了。當然,太任意更改變數指向的資料類型,只會把程式搞得更複雜而已。最好還是把不同功能的變數分開宣告,讀起來也比較容易懂。 ### Python 變數的命名規則 @@ -298,10 +309,8 @@ Python 變數的命名非常自由,除了不能用數字開頭以外,可以 Python 變數名稱也支援 Unicode,因此使用中文、日文或各國語言都是可行的。使用非 Unicode 特殊字元會產生錯誤。不過,一般習慣上還是會以英數為主,而且最好能清楚反映變數本身的用途。 -當然還有一個你不應該做的事,就是使用 Python 內建功能的名稱來當變數。這會導致那個名稱指向了你給予的資料,結果原本的功能就沒辦法用了,可能還會導致程式錯誤。 +當然還有一個你不應該做的事,就是使用 Python 內建功能的名稱來當變數。這會導致那個名稱指向了你給予的資料,結果原本的功能就沒辦法用了,說不定還會導致程式錯誤。 的 - - (持續寫作中...)