回覆列表
  • 1 # 職場新人王小明

    這是python比c“高階”的一個特性,使用變數之前不需要定義變數的型別。這讓初學者感覺非常方便,但對於“老碼農”來說,卻存在很大的一個坑,只有在實際專案中使用過的人才深有體會。

    以前我學c的時候,也感覺定義一個變數,非要先給他定義一個型別非常麻煩,因為往往我既然使用一個變數,那麼我就敢保證不會在他是什麼型別上出錯,感覺先定義他的型別很多餘。

    直到我做了幾個專案之後才發現,使用變數前先定義他的型別,是多麼的有必要。

    最常見的例子就是在實際的專案中,為了便於之後的維護,那麼變數名都應該有一個便於理解的名稱,比如teacher,中文意思是老師,那麼我會用這個詞作為定義老師的一個變數。

    但如果在之後的引用中,你寫成techer,在python中是不會報錯的。python會把他定義為一個新的變數,這會導致如果程式沒執行到這一行,你永遠不知道他錯了。或者執行到這一行,程式可以正常執行,但永遠拿不到正確的結果。

    這會讓你花大量的時間來排查,這個時間遠遠要比在使用變數前定義他是int還是str要多得多!

    而在c中,這個變數沒有被定義過,當程式進行編譯的時候,就會報錯。這可以省去非常多不必要的麻煩。

    有時候不是你仔細就不會出錯,畢竟在專案開發中,你還需要和別人配合寫程式碼,你不能保證別人不寫錯。

    python的語法雖然比c簡單,但不一定簡單都是好的,對於程式來說,“規則”比簡便更高效。

  • 2 # 馬少平THU

    簡單地說,Python是解釋型語言,解釋型語言是不需要事先定義型別的,basic語言也是解釋型語言,也不需要定義變數型別,同樣還是lips語言。而C、C++等是編譯型語言,需要事先定義變數型別。

  • 3 # shawn25

    因為python就是這麼設計的。

    首先明確的是,不管什麼語言,最終編譯成計算機可識別執行的機器碼時,變數的資料型別必須是確定的。因為不確定變數到底是哪種資料型別,程式是不可能執行的。

    不管哪種程式語言,都是為了方便我們人類閱讀的,計算機不認識程式語言的程式碼,所以必須由一個程式來把程式設計原始碼轉換成機器可以識別的機器碼。

    所以,類似c java這類的靜態語言,要求在程式設計時預先定義變數型別,那麼編譯程式在識別變數定義時,就直接固定好變數的資料型別。

    而python這類動態語言,編譯器則是在變數賦值時,自己根據上下文判斷資料型別到底是什麼。

    比如 python中, x = 1 編譯器就能判斷出是int型別,如果x = "1" 那麼就是char型別。

    這兩種方式各有好處

    首先 靜態語言的最大好處就是,方便查錯。由於靜態語言不需要根據上下文猜測資料型別,所以IDE可以很方便的在編譯之前知道你程式哪裡出錯了。而動態語言則必須在編譯時才能知道哪裡資料型別出錯了。

    第二個好處就是,在編譯過程中,不需要根據上下文判斷資料型別,自然編譯的速度就要比動態語言快。

    而動態語言的好處就是,靈活多變,可以讓程式設計者專注於業務邏輯,而不是資料型別定義。

    當然,壞處就是速度慢,後期維護你也的自己根據上下文判斷到底是什麼資料型別。

    對於小程式,這個缺點不明顯,因為你一眼就能看出來變數的型別。

    但是對於上千行的大程式,你就不太容易迅速的看出來變數到底是什麼型別。

    不如 一個數千行的函式, 返回值是一個變數X, 但是變數x又是另外一個函式計算的值,另外一個函式的引數是y ,返回值是z, z又是變數f計算得到的,變數f則是變數g得到的。那麼,x到底是什麼型別呢??? 恐怕你得閱讀整個程式碼才弄的清楚。

    基於這個弊端,python加入了type hint 語法註記,你可以用註解的方式開提示編譯器變數到底是什麼型別。 如果用python開發大型程式,建議使用type hint。

  • 4 # 枝枝葉葉

    因為 python 根據變數的格式 ,自動推斷出變數的型別,內部變數也有型別的,可以用 type 檢視。使用者要將 浮點型 資料 轉換成 整型數 時,也需要用 顯式的 強制型別 轉換。比如 a=1 b=2.5 python 直譯器,自動將 a 設定成 整形,b 設定成 浮點型。要將b 的值轉成整型號,也需要用 (int)b ,來轉換,python 對整數做運算時,沒有位數限制,不會溢位,相當於在直譯器裡 集成了 大數 計算庫。c語言裡區分 int, long ,unsigned int 等,主要是為了控制 程式的 記憶體佔用,可以精確計算每個變數以及計算步驟的記憶體佔用,如果發生溢位,需要自己在程式裡處理。c語言裡的 變數型別,基本和 計算機 暫存器的 資料型別表示 格式 一一對應。比如64位計算機c語言裡 int 是8位元組,32位計算機裡 int 是4位元組, python 只所以程式設計如此方便,就是有c語言編寫的 python 直譯器 在 做支撐。對使用者隱藏了底層過程,直接提供高階介面,和python 裡 不用 呼叫 malloc 和 free 管理記憶體,自動管理記憶體一樣。c++ 是c語言的擴充套件,不對使用者隱藏 底層細節,定義變數型別,可以實現計算過程記憶體 佔用,以及使用 計算機指令的精確控制。

  • 中秋節和大豐收的關聯?
  • 你練書法多久了?你的作品如何?