※ 本文轉寄自 ptt.cc, 文章原始頁面
Re: [閒聊] 結論是C#比Java厲害嗎
※ 引述《arrenwu (最是清楚哇她咩)》之銘言:
: 而如果追求更方便、同時短短幾行就能引出很大效果的程式語言,
: 那從Python入門也行。這個對程式麻瓜最友善
: 缺點就是使用者對於電腦處理整數、小數點、字串的方式,
: 以及記憶體管理會很沒有概念。
: 有人可能覺得這些計概會教,我個人覺得是...
: 這些東西只有摸了才會知道在幹嘛,讀過計概就只有「反正底下就是01010101」
:
: 推 phoenix286: 就算不清楚電腦處理資料型態及記憶體管理的方式 12/20 08:33
: → phoenix286: 這對使用者會有什麼影響嗎? 12/20 08:33
整數簡單,會出現問題通常是浮點數
------ Pytthon 3.9.7 ------
>> x = 0.1 + 0.2
>> x - 0.3 == 0.0
False
表面上看起來是 "0.1 + 0.2 - 0.3 不等於 0.0"的怪事,
但實際上是你打進一個浮點數,實際上程式存進去的數值跟人想的不一樣。
這必須要知道電腦怎麼處理資料
另外關於記憶體管理的部分,我講記憶體管理可能容易造成誤解,
我想描述的是在 C 裡面 malloc 或 new 算子在記憶體裡面創造物件的機制
最終是要了解 pass by reference 和 pass by value 的差異。
C/C++ 會強迫使用者要理解這差異
但是Java以上隱藏了pointer的存在後,這部分就比較模糊
這差異的重要性在於...
x = 3;
y = x; # 複製x到y
y = 9; # 現在設定y的數值為9
x -> 3
y -> 9
非常直覺的結果
但換成 numpy 的矩陣:
import numpy as np
A = np.array([[1,2],[3,4]])
B = A # 複製A到B
B[0,0] = 9 # 改動B的第一個entry為9
B -> [9,2]
[3,4]
A -> [9,2] <---- 你只有改B,但A也被改動了
[3,4]
要理解這個情況,使用者無論如何都要理解pointer的概念
啊對了,矩陣那個例子,在MATLAB不成立
MATLAB 矩陣的等號算子是 deepcopy 嘻嘻
不過記憶體管理也確實該要了解啦
因為有時候你一個不小心還是會在Python造成memory leak。
如果沒有記憶體管理概念的話,你連你的程式可能造成memory leak都不知道
--
角卷綿芽Line貼圖上市囉~
24種可愛貼圖,只要30元!
https://pbs.twimg.com/media/FTwzC2AUYAAF5AY.jpg
購買連結:https://t.co/lNGU5jN7b2
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 98.45.195.96 (美國)
※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1703038911.A.7A1.html
Re: 回文串
98261
[閒聊] 結論是C#比Java厲害嗎
C_Chat12/19 21:12
3086
Re: [閒聊] 結論是C#比Java厲害嗎
C_Chat12/20 01:47
41103
> Re: [閒聊] 結論是C#比Java厲害嗎
C_Chat12/20 10:21
-47
Re: [閒聊] 結論是C#比Java厲害嗎
C_Chat12/20 11:56
2957
Re: [閒聊] 結論是C#比Java厲害嗎
C_Chat12/20 11:56
03
Re: [閒聊] 結論是C#比Java厲害嗎
C_Chat12/20 16:36
522
Re: [閒聊] 結論是C#比Java厲害嗎
C_Chat12/20 19:00
推
推
推
推
推
→
推
推
→
推
→
→
推
→
推
→
推
→
→
推
推
→
→
→
推
→
推
→
→
推
推
推
推
推
→
推
推
推
→
推
→
噓
→
→