經驗是一把兩面刃

更新於 發佈於 閱讀時間約 6 分鐘
經驗是一把兩面刃。有了過去的經驗,在學新的東西時,可以觸類旁通,很快的進入狀況;而在面對從未遇過的狀況時,也可以快速做出反應,以爭取時效,或者規避危險。學會騎腳踏車後,再來學騎摩托車,可以很快就學會,這是經驗的正面效果。那經驗的負面效果呢?「一朝被蛇咬,十年怕井繩」就是個典型的例子。或許是生存的本能,我們總是會因為不好的經驗,而去規避,不願接受挑戰,最後躲在舒適圈不肯出來。另一種經驗的負面效果是,太相信過去成功的經驗,導致墨守成規,僵固於過去的模式,而以錯誤的或過時的方式,來應對處理全新的狀況,最後以失敗收場。在商業上,這種例子屢見不鮮;在程式語言的學習上,也是一樣。過去學習過的程式語言,可以讓你在學習新的語言時,很快就能進入狀況,畢竟很多觀念跟結構是共通的,例如條件判斷、迴圈、data type、class、object... 但是,每個語言也有其不同的設計,稍微不注意,就很容易用過去學過的語言來理解,而忽略了其內涵的不同之處,導致多走了許多冤枉路。
在Python中,所有東西都是物件。執行程式碼a = 5,會建立5這個物件,然後給a一個reference,這個reference就是告訴a,它的值放在記憶體的哪個位置,要用時,就到那裡去拿。
看到這裡,很直覺的反應是:這不就是C裡頭的pointer嗎?!然後就沒再多想了。
immutable object如int、float、complex、string、tuple等型態的object,他們的值是固定的,不能改變;而mutable object如list、dict、set等型態的object,他們的值是可以改變的。
昏頭了!什麼immutable、mutable?為什麼不說unchangeable、changeable?意思不都一樣嗎?查了網路上的字典,都還是同義字咧!有的字典還乾脆就說immutable、mutable是程式語言用語,然後解釋了一番,可我的疑問是,為什麼當初要選這兩個字來用,而不是用另外有同樣意思的字眼?好吧!這可能很難考證了,畢竟新的東西不斷出現,總得有個字眼來指稱,有時候還真沒什麼太大道理可言,就好像ball point pen翻成中文時,硬是叫成「原子筆」,只因那時「原子」兩個字很潮、很厲害。還有啊,讓人充滿遐想的「比基尼」,其實是因為剛推出時,美國正好在「比基尼環礁」進行核試爆,取這個名字容易吸引人,於是就這麼用了。所以啊,immutable就immutable;mutable就mutable,反正就是那意思,現在不也一堆東西叫「量子」什麼東東的,也沒什麼道理啊!還有還有,現在電動車越來越普及,未來燃油車應該會走入歷史。現在用來加速的那個,我們管它叫「油門」。可是電動車用的是電,不是油。那你說那個用來加速的,該叫什麼?好像大家還是叫它「油門」。未來的某一天,或許會有人開始探究,車子明明就沒有用油當燃料,為什麼要叫「油門」咧?!
immutable object的值不能改變,如果寫a = 5,表示a的型態是int,所以值不能改變。可是可以接著寫a = 6,這時候a的值就從5變成6了,這樣怎能說是immutable?原來,執行a = 5時,會給a一個reference指向5,再執行a = 6時,也就只是給a另一個reference指向6而已。看起來挺合乎邏輯的,不是嗎?immutable這觀念是懂了,可又覺得有點彆扭,但也說不出哪裡不對勁。
倪匡筆下的衛斯理在面對問題時,常常會有那種似乎彷彿好像抓住了什麼解決之道,但又說不出個所以然來的情形。然後,在後來的某一瞬間,一切都豁然開朗,答案清晰可見。其實這種現象倒也不是小說中才會出現,現實生活中也常見。就在和巢狀list的複製問題奮戰的時候,突然間,就像剔掉塞在牙縫中很久的菜渣一樣,一陣輕鬆,神清氣爽,immutable算是真正搞懂了。原來,immutable object指的是像5、6這些數字,不是變數a,在許多解釋immutable、mutable觀念的文章中,其實都有提到,只是並沒有特別去強調而已。先前因為把reference類比為pointer,所以沒去特別注意,才導致後來在巢狀list的複製問題上卡關。
在其他需要宣告變數的程式語言,例如C、Fortran、VB中,宣告變數,例如int a,是讓系統配置一塊記憶體給a這個變數。這塊記憶體有多大呢?就int這麼大!同樣是整數,配置的記憶體大小,不同的程式語言在不同的作業系統上,可能都不同。但無論如何,反正就是會照程式語言的規定給就是了。那變數a要這塊記憶體做什麼?就把它當倉庫而已!這倉庫裡頭放的,就是a的值。不過雖然是倉庫,也不能什麼東西都塞進去。既然當初宣告時,就已經表明,倉庫裡頭是要擺放int這個型態的數字,那做人要甘願,更何況是白紙黑字寫下的宣告,這個倉庫裡頭,就只會放int型態的數字。換句話說,a的值,就一定是int型態的數字。當然囉,就像房子會有地址一樣,a的倉庫,也就是配置的記憶體,也有地址,這樣才知道東西存放的確切地點,而pointer指的就是這個地址。當要改變a的值的時候,直接把新的值放到a的倉庫就好了,a還是a,地址也沒變。所以啊,其實a和它的倉庫的地址是一體兩面,只是在寫程式的時候,用a比較簡單、方便,畢竟倉庫的地址可是一大串令人頭皮發麻的數字。上網時,我們會用網址,而不是用ip,也是同樣的道理。
說來有趣,address這個字,就是「地址」的意思。可是在資訊領域,卻會翻成「位址」。「位址」兩個字感覺就是比較有學問一點,不過仔細想想,這樣翻還挺有道理的,畢竟如果是要指稱在記憶體中的位置,「位址」還是比較傳神一點。
就是因為根據以前的經驗,宣告變數以後,例如int a,就有了a這個型態是int的變數,不管是後來寫a = 5,或直接把5放到a的記憶體倉庫中,乃至於複製a的值給其他變數,只要有a在心中就可以了,pointer其實可以不用太在意,畢竟沒那玩意兒的Fortran、VB也活得好好的,不是嗎?所以啊,在Python裡頭看到a = 5時,自然而然的,心中也就只有a了。至於reference,想當然耳,就是pointer嘛!也就也沒太在意了。這樣子的認知,其實也沒什麼太大的問題產生,等到面對list這種mutable object時,才覺得這邊也卡卡的,那邊也卡卡的,直到徹底拋棄pointer,重新認識reference為止。在武俠世界中,很多絕世武功,都必須散盡全身功力,徹底告別以前苦練的成果,才能練成,或許也就是這麼回事吧!
為什麼會看到廣告
avatar-img
15會員
131內容數
寫點東西自娛娛人
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
ysf的沙龍 的其他內容
comprehension應該可說是Python的絕學之一吧。不過既然是絕學,總是會有讓人容易在運氣時一個不小心走錯經脈的地方。現在我需要一個二維的list,利用comprehension來造一個,應該是再好不過的選擇。只是這地方,就是個容易出錯的地方。
蝦蜜?!Python沒有內建array?!剛發現這件事時,還真的有點傻眼,怎麼會沒有array這麼好用的data type呢?
寫程式時,很傷腦筋的一件事,就是變數的名稱該怎麼取。其實變數名稱隨便取,並不會影響程式的正確性,但對程式的可讀性,以及後續的維護,那可就影響深遠了。
第一個要拿來練功的題目是:Game of Life。
呼!寫文章真是比寫程式還要燒腦、燒時間。一開始是沒想到要寫這「隨筆」的,是有天程式寫著寫著,腦海中就冒出這麼個想法來,要把跟Python交往的過程寫下來。
在看官網文件時,看到一份文件:PEP 8 -- Style Guide for Python Code。這份文件是關於Python程式碼風格的指引和建議。
comprehension應該可說是Python的絕學之一吧。不過既然是絕學,總是會有讓人容易在運氣時一個不小心走錯經脈的地方。現在我需要一個二維的list,利用comprehension來造一個,應該是再好不過的選擇。只是這地方,就是個容易出錯的地方。
蝦蜜?!Python沒有內建array?!剛發現這件事時,還真的有點傻眼,怎麼會沒有array這麼好用的data type呢?
寫程式時,很傷腦筋的一件事,就是變數的名稱該怎麼取。其實變數名稱隨便取,並不會影響程式的正確性,但對程式的可讀性,以及後續的維護,那可就影響深遠了。
第一個要拿來練功的題目是:Game of Life。
呼!寫文章真是比寫程式還要燒腦、燒時間。一開始是沒想到要寫這「隨筆」的,是有天程式寫著寫著,腦海中就冒出這麼個想法來,要把跟Python交往的過程寫下來。
在看官網文件時,看到一份文件:PEP 8 -- Style Guide for Python Code。這份文件是關於Python程式碼風格的指引和建議。
你可能也想看
Google News 追蹤
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在 Python 中,tuple 與 List有一個關鍵的不同點:tuple 是不可變的,這意味著一旦創建了 tuple,就無法更改其內容。 這與 List的可變性形成了對比,list 可以新增、刪除或修改元素。 元素的意思: 元素:指的是 List 中的每一個獨立的項目或值。
Thumbnail
今天要來介紹的是Python中資料型別的函數, 這幾天學習的素材是Youtube上“程式柴大大的Python 6 小時初學者課程”,一步一步帶著大家操作並解,學習中也別忘了要多多練習,練習的部分我是把我學到的東西請Chatgpt幫我出類似的題型並讓我練習。 以下我先寫出一個簡單的code,再加以
Thumbnail
這篇內容,將會講解什麼是變數範圍,以及與變數範圍相關的知識。包括變數範圍的簡介、實體變數、全域變數、局部變數、常數。
Thumbnail
裝置藝術是一種獨特創作形式,追溯到法國藝術家杜尚。 「失聲畫眉之歌」探討數位時代的記憶議題,文本、水墨長卷、遮陽網、展牆,模擬社群軟體窺看私人情感的多重視角,觀者透過不同的觀賞狀態,感受作品的多維時空。 裝置藝術的魅力在於觀眾可以走進作品,當他們走出作品時,已經不一樣,這正是藝術的魔力所在。
Thumbnail
本文介紹了Python中的物件導向程式設計的重要概念,包括類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射。每個概念都有對應的程式碼範例來說明其用法和功能。這些概念對於理解和使用Python進行物件導向程式設計至關重要。
※ 認識變數: 變數(variable)是在程式裡面把東西存起來的概念。 基於不讓電腦每次都需要重新運算,把需要花時間運算的東西先存起來,之後再直接拿出來使用,所以我們需要變數。 變數儲存的位置在電腦裡的記憶體。變數就像是一個箱子,記憶體就像是一個倉庫。箱子的名稱就是變數名稱,箱子的內容物就是
Thumbnail
距離現在已經有一段時間了,就算是到今天都不是很確定那一個晚上在那個地點發生的事情到底是真實還是在做夢⋯畢竟那也是目前為止唯一一次感覺比較超自然的現象。 依稀記得還是學生時期的一個夜晚躺在宿舍床上準備就寢,就突然間全身都無法動彈!是那種被牽制著想動卻無法動也無法發出聲音的無助感⋯明明可以看到同學
Thumbnail
$MU FY2Q24 財報結果營收優於我的預期 2% 至 58 億美元,稀釋後 EPS 0.42 美元也優於我的預期 0.39 美元,主要是因為 DRAM、NAND Flash 兩大產品線無論是在 YoY 的基礎或是 QoQ 的基礎上皆非常大幅加速,出貨量 Q 的變動並不大,營收加速全部主要是平均單
Thumbnail
美国添加了一座艺术馆:H.H.第三世多杰羌佛文化艺术馆,这座艺术馆专门永久性陈列世界和平奬最高荣誉奖得主,美国国会参议院第614号决议定性的世界佛教最高领袖H.H.第三世多杰羌佛的部分佛教成就和文化艺术成就。
我們的人生經驗可作為前進的天使或進步的障礙,視乎我們的解讀與運用。透過《底層邏輯》中的“假設-驗證-結論-調整”策略,我們學會從失敗中成長。保持開放和空杯心態,從每次經歷吸取教訓。在創意寫作裡,這些經驗轉化為治療自我與啟發他人的力量。
Thumbnail
現代社會跟以前不同了,人人都有一支手機,只要打開就可以獲得各種資訊。過去想要辦卡或是開戶就要跑一趟銀行,然而如今科技快速發展之下,金融App無聲無息地進到你生活中。但同樣的,每一家銀行都有自己的App時,我們又該如何選擇呢?(本文係由國泰世華銀行邀約) 今天我會用不同角度帶大家看這款國泰世華CUB
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
在 Python 中,tuple 與 List有一個關鍵的不同點:tuple 是不可變的,這意味著一旦創建了 tuple,就無法更改其內容。 這與 List的可變性形成了對比,list 可以新增、刪除或修改元素。 元素的意思: 元素:指的是 List 中的每一個獨立的項目或值。
Thumbnail
今天要來介紹的是Python中資料型別的函數, 這幾天學習的素材是Youtube上“程式柴大大的Python 6 小時初學者課程”,一步一步帶著大家操作並解,學習中也別忘了要多多練習,練習的部分我是把我學到的東西請Chatgpt幫我出類似的題型並讓我練習。 以下我先寫出一個簡單的code,再加以
Thumbnail
這篇內容,將會講解什麼是變數範圍,以及與變數範圍相關的知識。包括變數範圍的簡介、實體變數、全域變數、局部變數、常數。
Thumbnail
裝置藝術是一種獨特創作形式,追溯到法國藝術家杜尚。 「失聲畫眉之歌」探討數位時代的記憶議題,文本、水墨長卷、遮陽網、展牆,模擬社群軟體窺看私人情感的多重視角,觀者透過不同的觀賞狀態,感受作品的多維時空。 裝置藝術的魅力在於觀眾可以走進作品,當他們走出作品時,已經不一樣,這正是藝術的魔力所在。
Thumbnail
本文介紹了Python中的物件導向程式設計的重要概念,包括類別、繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型和反射。每個概念都有對應的程式碼範例來說明其用法和功能。這些概念對於理解和使用Python進行物件導向程式設計至關重要。
※ 認識變數: 變數(variable)是在程式裡面把東西存起來的概念。 基於不讓電腦每次都需要重新運算,把需要花時間運算的東西先存起來,之後再直接拿出來使用,所以我們需要變數。 變數儲存的位置在電腦裡的記憶體。變數就像是一個箱子,記憶體就像是一個倉庫。箱子的名稱就是變數名稱,箱子的內容物就是
Thumbnail
距離現在已經有一段時間了,就算是到今天都不是很確定那一個晚上在那個地點發生的事情到底是真實還是在做夢⋯畢竟那也是目前為止唯一一次感覺比較超自然的現象。 依稀記得還是學生時期的一個夜晚躺在宿舍床上準備就寢,就突然間全身都無法動彈!是那種被牽制著想動卻無法動也無法發出聲音的無助感⋯明明可以看到同學
Thumbnail
$MU FY2Q24 財報結果營收優於我的預期 2% 至 58 億美元,稀釋後 EPS 0.42 美元也優於我的預期 0.39 美元,主要是因為 DRAM、NAND Flash 兩大產品線無論是在 YoY 的基礎或是 QoQ 的基礎上皆非常大幅加速,出貨量 Q 的變動並不大,營收加速全部主要是平均單
Thumbnail
美国添加了一座艺术馆:H.H.第三世多杰羌佛文化艺术馆,这座艺术馆专门永久性陈列世界和平奬最高荣誉奖得主,美国国会参议院第614号决议定性的世界佛教最高领袖H.H.第三世多杰羌佛的部分佛教成就和文化艺术成就。
我們的人生經驗可作為前進的天使或進步的障礙,視乎我們的解讀與運用。透過《底層邏輯》中的“假設-驗證-結論-調整”策略,我們學會從失敗中成長。保持開放和空杯心態,從每次經歷吸取教訓。在創意寫作裡,這些經驗轉化為治療自我與啟發他人的力量。