iT邦幫忙

2021 iThome 鐵人賽

DAY 6
1

經過了前面幾天的基本教學,相信大家都對 Python 有了基本的認識,也應該有點累了,所以今天來講一下輕鬆一點但是對之後更進階的部分會更容易上手的東西。

優缺點

這部分主要都是針對 Python 本身技術上的特性去評價的優缺點(就是只跟你講麵包好不好吃、成分是啥而已,多少人喜歡吃、價格多少不重要)。

優點

Python 相對於其他程式語言的有點有:

  1. 語法簡單
  2. 應用廣泛
  3. 絕對免費

缺點

  1. 執行速度慢
  2. 語法混亂

沒辦法,不能又要馬兒好,又要馬兒不吃草,不過 Python 相比其他程式語言真的廣泛很多。

缺點1 的部分可以透過金錢(買更好的處理器)或時間(等更好的處理器)來稍微抵銷掉。加上 Python 之父已經要改善 Python 執行速度的問題,所以這個缺點會漸漸改善。

缺點2 的部分已經不太算是缺點了,因為這個主要是從 Python 2 轉到 Python 3 時,3 的語法跟 2 不太一樣,導致無法向下兼容。不過不太算是缺點的原因是 Python 2 在 2020/1/1 開始被棄用了,加上 2019 開始 3 的占比已經超過 90% 了,而且Python 4 應該不會出現,所以這個缺點已經快消失了。

輕鬆的東西

在寫 Code 的時候,除了 Coding Style 跟命名規則要注意之外,還有一些大方向的原則也要盡量遵守(不遵守也不會怎樣,只是在維護的時候就會想打爆之前的自己就對了),這些大方向的原則主要目的都是提高程式的可讀性。

在維基百科 Python 頁面中的 #特徵與設計哲學 寫到

Python的設計哲學是「優雅」、「明確」、「簡單」。它的重要準則被稱為「Python之禪」。

在CMD中輸入

$ python

進入 Python 解釋器後再輸入

$ import this

就可以看到完整列表

The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're > Dutch.
Now is better than never.
Although never is often better than right now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

對目前階段的我們來說,在這之中更重要的是前面 7 點

  • 優美優於醜陋,
  • 明瞭優於隱晦,
  • 簡單優於複雜,
  • 複雜優於凌亂,
  • 扁平優於巢狀,
  • 稀疏優於稠密,
  • 可讀性很重要!

(巢狀是什麼?就是 Day 03 的波動拳)

簡單又有點重要的東西

程式語言型別

動態型別? 靜態型別?

什麼是靜態型別,簡單理解就是必須明確地宣告變數的型態,例如 C 語言:

int num = 10
char c = 'apple'

而動態型別則是反之,例如 Python:

num = 10
c = 'apple'

強型別? 弱型別?

而什麼是強型別呢,就是不允許隱式的型別轉換,例如 Python 這樣寫一定會出現錯誤:

# Input
age = 20
print('My age: ' + age)
# Output
TypeError: can only concatenate str (not "int") to str

反之則是弱型別,例如 JavaScript:

// Input
Math.floor("3.14")
// Output
3

好啦,講這些程式語言型別主要是想要提醒一下,在對資料操作的時候,要注意一下資料型態,因為 Python 不用宣告變數型態,但是又不允許隱式的型別轉換,所以偶爾會因為資料型態不符噴出 Bug。

有點困難又有點重要的東西

在 Python 中,Function 的地位和 C++、Java 等不同,是屬於 "First-class Citizen" (一等公民),故稱作 "First-class function" (一級函數)。

什麼是 "First-class Citizen" 呢?跟二等公民又差在哪呢?

最明顯的差別是 Python 中的 Function 可以當成參數傳遞並執行(對啦,我就是只想講這句而已,其他暫時不太重要)。

參考資料

Python 2將被棄用,但PyPy會繼續支援Python 2.7

Python 版本占比

Python之父近期重大宣布,CPython執行速度4年內將翻5倍

Python之父:Python 4.0可能不會問世

First-class citizen

SOLID原則

DRY原則

那麼就大概這樣,這篇是讓你在要進入更深的部分前先了解一些東西而已。

大家掰~掰~


上一篇
Day 05 Decorator
下一篇
Day 07 PIP & import 入門
系列文
月光下的Flask之旅30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言