从XXX语言到Python ::-- ZoomQuiet [2007-01-03 13:15:30]
Contents
1. 缘起
林育民(Fred Lin)倡议邮件 gasolin@gmail.com
1.1. 从C语言到Python
[:FromXxxToPython:从XXX语言到Python] 之 From C to Python --從 C 到 Python
::-- ZoomQuiet [DateTime(2007-01-03T13:19:58Z)] TableOfContents
1.2. 從 C 到 Python
C 語言是一門有用的語言, 可以讓你完成你的工作. 如果你已經能運用 C 語言寫作程式, 那麼學習 Python 語言則可以讓你在寫程式的同時還能獲得樂趣.
* 經驗
學習 C 語言的過程並不容易, 但是跨出從 C 語言到 Python 語言轉換的過程卻相當簡單.
我得承認在我剛開始學習 Python 語言時也是拿我熟悉的 C 語言程式來作修改, 在我最初寫作 Python 語言程式時, Python 程式裡那些 C 語言才使用分號都還留著 (python 語言並不需要結束符號, 但仍然可以使用), 得到的結果是一個骨子裡是 C 語言的 Python 程式. 學習 Python 語言的原因只為Python 語言跟 C 語言的語法超像, 貪圖使用 Python 語言時不用預先編譯的方便性. (這些 Python 語言的特性將在文中一一介紹).
後來漸漸深入學習 Python 語言, 才發現原來 Python 語言有它自己的特色與風格: 簡單, 易讀, 可移植性, 高效能.
* 相同點
首先, Python 語言直譯器是用 C 語言撰寫的, 你可以期望 Python 語言與 C 語言的語法有很多相近之處.
雖然 Python 語言是直譯式的語言, 但是 Python 語言也具有很高的執行效能.
Python 語言像 C 語言的近親 C++ 語言一樣是物件導向 (Object-Oriented) 的程式語言, 但是用起來簡單地多. 同時你仍然可以用 C 語言流程式的方式來撰寫程式.
* 一個可以達到的目標
我們從一個實際的例子開始: 將一個接受使用者輸入數字 n , 然後輸出 2 的 n 次方結果的 C 程式改寫成 Python 程式.
執行結果為: 輸入 1 得 2**1 = 2, 輸入 2 得 2**2 = 4, 輸入 3 得 2**3 = 8, 輸入 4 得 2**4 = 16, 輸入 5 得 2*85 = 32, 依次類推。
1.2.1. 程式展示
1.2.1.1. C 語言原程式
/************************* * 計算 2 的 n 次方 *************************/ power.c #include <stdio.h> // 導入IO處理函式庫 /* 計算 n 次方 */ power(int base, int level) // 接受變量 base(基底), level(級數) { // 函式區塊開始 int result; // 宣告輸出使用的變量 if (level != 1): // 判斷: 如果輸入變量值不等於1 { // 判斷區塊開始 result = base**level; // 程式運算 } // 判斷區塊結束 else // 其他情形 { // 判斷區塊開始 result = 1; // 程式運算 } // 判斷區塊結束 // ex: 輸入 2 得 2**2 = 4 printf("輸入 %d 得 %d**%d = %d", &input, &base, &level, &result); // 印出結果至螢幕 return result // 返回結果 } // 函式區塊結束 /* 接受使用者輸入並印出結果 */ main() // 主程式 { // 函式區塊開始 int input; // 宣告輸入使用的變量 scanf("get an input:", %input); // 讀入數值到 input 變量 power(2, input); // 呼叫 power 函式, 以 2 為基底 } // 函式區塊結束
1.2.1.2. 改好的 Python 程式
下面的程式是改寫好的 Python 程式. 後文中會作講解
1 #power.h
2
3 """
4 計算 2 的 n 次方
5 """
6
7 # 計算 n 次方
8 def power(base, level): # 接受變量 base(基底), level(級數)
9 if (level != 1): # 判斷: 如果輸入變量值不等於1
10 result = base**int(level) # 程式運算
11 else: # 其他情形
12 result = 1 # 程式運算
13
14 print "輸入 %d 得 %d**%d = %d"%(input, base,
15 level, result) # 印出結果至螢幕
16 return result # 返回結果
17
18 # 接受使用者輸入並印出結果
19 if __name__ =="__main__": # 運行這個檔案時執行
20 input = raw_input("請輸入數字:")# 讀入數值到 input 變量
21 power(2, input) # 呼叫 power 函式, 以 2 為基底
1.2.2. 1.2 導入 Import
C 語言的輸入與輸出需要使用到IO處理函式庫 stdio.h, 取用其他函式庫的方式是使用 include 語句
Python 中取用其他函式庫的方式則是使用 import 語句. 而在 Python 語言中, 輸入與輸出函式是內建的
參考閱讀:
1.2.3. 1.3 註解 Comment
註解相當的重要, 它可以讓妳在程式中寫下讓閱讀這程式的人更容易瞭解這份程式的註釋. 它也可以幫助妳在六個月後還能快速讀懂妳自己的程式. 所以呀, 請儘量地在妳的程式裡加入註解吧.
C 語言中使用兩個斜線符號 "//" 來為各行加上註解, Python 語言中使用井字符號 "#" 來為各行加上註解.
對於較長的註解, C 語言中使用:
- 斜線接星號開始 星號接斜線結束
*/
Python 語言中使用
"""
- 三個雙引號開始 三個雙引號結束
"""
1.2.4. 1.4 輸入與輸出
1.2.4.1. 1.4.1 輸出
C 語言的輸出函式是 printf, Python 語言的輸出函式是 print
兩者僅有些微妙的差異.
C 語言中使用:
printf("輸入 %d 得 %d**%d = %d", &input, &base, &level, &result); // 印出結果至螢幕
Python 語言中使用:
print "輸入 %d 得 %d**%d = %d"%(input, base, level, result) # 印出結果至螢幕
python 中可以使用單引號, 雙引號""表示字串, 或是使用三個雙引號來表示長字串(與長補註相同).
1.2.4.2. 1.4.2 輸入
C 語言的輸入函式是 scanf, Python 語言的輸入函式是 raw_input
C 語言中使用:
scanf("get an input:", %input); // 讀入數值到 input 變量
Python 語言中使用:
input = raw_input("請輸入數字:")# 讀入數值到 input 變量
參考閱讀:
1.2.5. 1.5 主程式
c 語言中標示首次執行需使用 main() 函式表示, python 語言中則可以用 if name == "main": 語句來替代 main() 函式的執行效果.
C 語言中使用:
main() {
- ..
}
Python 語言中使用:
if name =="main":
- ..
1.2.6. 1.6 程式碼縮排
1.2.6.1. 1.6.1 區塊判斷
c 語言中以大括號標示一個判斷區塊的開始和結束, 這種表示方法被許多語言所沿用. Python 語言不需要以大括號標示, 而是以"程式碼縮排"來表示一個判斷區塊的開始或結束. 一個程式碼縮排的適當距離是4個空格的距離.
注意到就像 C 語言中一定要在每個區塊前後加上大括號一樣, Python 語言對在 Python 中起到相同作用的"縮排"要求一樣非常嚴格. 當 C 程式中少加了一個大括號時, C 語言編譯器會出現括號不匹配的錯誤訊息; 當 Python 程式中縮排不正確時, Python 語言直譯器也會顯示解譯錯誤的訊息.
在我學習 Python 語言後, 我把縮排這習慣帶到我的 C 語言程式中, 所以我的 C 語言程式也讓人看起來很舒服.
1.2.6.2. 1.6.1 易讀性 Readable
C 語言的功能雖然強大, 但是 C 語言的程式卻也可以寫得很醜陋, 讓人難以閱讀. 而我無法控制其他人寫的 C 程式.
Python 程式因為縮排約定的關係, 無論是誰寫的都具有同樣的規格, 這些約定形成了 Python 語言風格 (pythonic) 的一部分. 使用 Python 語言, 任何人都可以寫出美麗而且容易閱讀的程式碼.
1.2.7. 1.8 運算符
C 語言與 Python 語言中常使用的運算符幾乎是一致的
請參考
1.2.8. 1.7 流程判斷
C 語言中的 if/else 語句與 Python 語言中的 if/else 語句完全相同. 不同的是 Python 語言不需要以大括號標示一個判斷區塊的開始或結束, 所以 if/else 語句後要加上一個冒號表示 if/else 判斷區塊的開始.
Python 語言的不同之處是多數的語句都針對可讀性而做出改善.
例如多重判斷的情況下, 使用 C 語言常寫成, if / else if ... / else 語句. 到 Python 中則是簡化為 if / elif ... / else 語句.
關於其他的 elif, for, while 語句請參考
1.2.9. 1.9 宣告與型態
C 語言中使用變量前需要事先宣告型態. python 語言中使用變量則不用事先宣告型態, 這個特性稱為動態型別 (Dynamic Typing)
在使用 Python 語言時, C 語言中宣告的部份都可以省略
python 裡可以還可以使用其他方便資料結構
參考 列表, 字典, 對於較長篇的代換, 還可以使用樣板(template)
1.2.10. 1.10 物件導向
1.2.10.1. 1.11 Python 程式
再次列出改好的 Python 程式
power.h """ 計算 2 的 n 次方 """ # 計算 n 次方 def power(base, level): if (level != 1): result = base**int(level) # 程式運算 else: result = 1 print "輸入 %d 得 %d**%d = %d"%(input, base, level, result) return result if __name__ =="__main__": input = raw_input("請輸入數字:") power(2, input)
有沒有感覺到一點 Python 語言的直覺了呢?
1.2.10.2. 1.12 進一步的提高
請參考列出的參考書籍或文章
* [http://docs.google.com/View?docid=ajkxs9k6pqxr_3fb3njp Byte of Python] * *
1.3. 从C++到Python
给C++程序员的Python初学指南 (Guide to Python for C++ Programmers)
1.4. 从 Ruby 语言到Python
從 Ruby 语言到 Python (From Ruby to Python)
1.5. 从PHP 到Pytohn