# Python 簡介

> 

Published: 2011-10-12
URL: https://kaochenlong.com/python-introduction

---

## What is Python?

Python 的老爸是，[Guido van Rossum](http://www.python.org/~guido/)，聽說是他在 1989 年的時候的某個聖誕節無聊，然後就設計出這套程式語言，1991 年放出來給大家用，到目前已經有將近 20 年的歷史了。

&lt;!-- more --&gt;

目前主流的版本是 2.x 跟 3.x 系列，最新的版本目前分別是 2.7.2 版及 3.2.2 版，但 2.x 跟 3.x 有不少地方是不相容的，各位在使用時還請多留意。

## 設計哲學

在 [the Zen of Python](http://www.python.org/dev/peps/pep-0020/) 裡提到了 Python 的設計哲學：

&gt; There should be one-- and preferably only one --obvious way to do it.

這與其它程式語言例如 Perl 的&quot;There is more than one way to do it&quot;是完全不同的。

## What can Python do?

Python 是一種物件導向的語言，雖然它被歸類到 scripting language 一族，但它能做的事情跟一般的程式語言一樣，從數學運算、系統管理到網站開發，它都做得來的，而且都還做得不錯。

有人會覺得嫌 Python 很慢，老實說，我是不覺得慢到哪裡去。當然拿它跟編譯型的程式語言比當然不公平，不過也就是因為它不用編譯，而且語法很好學好寫，開發速度相對的會比編譯型的語言要來得高。

## Who is using Python?

- Google
- Youtube
- NASA
- ..and ME!

## Why Python?

每種程式語言都有它的優缺點，以下是我個人覺得我喜歡 Python 的一些特點：

### 程式碼強制縮排

在 Python 寫程式，程式碼強制一定要縮排，長得像這樣：

```py
def say_hello():
  print &quot;Hello Python&quot;
  print &quot;Hello again!&quot;
```

像這樣，不管你是要用 tab 或空白(space)都可以，要縮 2 格或 4 格都 ok，只要對齊就行了。只要程式碼沒有對齊，在執行的時候就會直接出現`IndentationError`的錯誤訊息而無法繼續執行。

也許有些人不喜歡這種被強制規定的感覺，不過我個人還滿喜歡的。在別的程式語言，有的人喜歡把大括號放在最後面，有人喜歡把大括號放下一行，像這樣：

```js
function type1() {
  // 把大括號放最後面
}

function type2() {
  // 把大括號放下一行
}
```

這沒有誰好誰壞的問題，不過這個在 Python 就比較不會有這樣的困擾，也因為如此，即使你是接手別人的案子，基本上程式碼的長相也不會差太多。

而且我真的遇過程式碼不縮排或亂縮排的工程師..

### 支援多個平台

目前幾乎所有比較主流的平台上面都有支援了，也就是說你在 Linux 底下寫的程式，搬到 Windows 上也能執行。(當然前提是沒有用到一些系統特定的模組或 method)

### 免費取得

不僅不用錢，而且連 Python 的原始碼都可以讓你帶回家研究。

### 開發工具易取得

其實寫 Python 不用什麼特別的開發工具，基本上只要是一般的文字編輯器就可以了。也有一些像[PyDev](http://pydev.org/)這種為 Python 量身打造的 IDE(Integrated Development Environment)也不錯用，不過我個人偏好純文字編輯器，例如`Vi`，至少開啟速度快，而且搭配一些好用的外掛，該有的功能都差不多該有了。

## 其它

電腦程式語言幾乎都是外國人的世界，你有想過用中文可以寫程式嗎? 有個叫做[周蟒](http://code.google.com/p/zhpy/)的專案做到了。這是用中文寫出來的 Python 程式：

```py
#!/usr/bin/env zhpy
# 檔名: if.py
數字 = 23
猜測 = 整數(輸入(&#39;輸入一個數字: &#39;))
如果 猜測 == 數字:
    印出 &#39;恭喜, 你猜對了.&#39; # 一個新區塊的開始
    印出 &#39;(但沒有獎品喔!)&#39; # 新區塊的結束
假使 猜測 &lt; 數字:
    印出 &#39;錯了, 數字再大一點.&#39; # 另一個區塊
    # 你可以在區塊中做任何想做的事 ...
否則:
    印出 &#39;錯了, 數字再小一點.&#39;
    # 只有在猜測 &gt; 數字 的情況下才會跑到這個區塊來
印出 &#39;結束&#39;
# 最後一行語句和&quot;如果..假使..否則&quot;語句是無關的，
# 因為最後的&#39;印出&#39;這行在主區塊中出現，所以這行永遠會被執行.
```

好寫嗎? 這見人見智了，不過挺有趣的，有興趣的朋友可以玩看看 :)

