從C#到Python —— 0 前言:進入Python的世界

來源:互聯網
上載者:User
0.0  寫在前面

 

前幾天寫了《從C#到Python —— 談談我學習Python一周來的體會》這篇文章,反響還不錯,對我這樣的Freshman是個很大的鼓舞。應博友的提議,從今天開始寫一個系列的連載文章《從C#到Python》。一方面是整理下我自己學習Python的心得體會,留著以後忘記時備查;另一方面就是希望能對有一定C#編程基礎、同時對Python感興趣的朋友有所協助。

首先要說明的是,這並不是一個完備的Python語言教程,因為這樣的教程在網路上、書店裡已經有太多了。本文的主要目的是希望能夠為C#使用者提供一個簡短的Python語言入門,以節省他們的學習時間。作為一個C#程式員,你掌握的編程知識已經足夠多了。要知道,Python和C#這兩門語言是非常相像的,它們之間的關係類似方言與普通話的關係,而不是英語和漢語的關係。你只是需要花點時間瞭解Python與C#之間的一些微小差別,然後動手編幾個小程式熟悉它。你會發現,Python比你想象的要更簡單。

此外,寫這個連載的目的並不是比較兩門語言的高下,更不是鼓動任何人完全從C#轉向Python。我的想法很簡單:把學習Python當作一個興趣,並能在適當的時候使用它。

考慮到目前兩門語言各自版本的普及情況,本文將主要結合C#的2.0版本和Python的2.6版本來進行介紹。對於一些在Python 2.6中已存在的但是在C# 3.0及4.0裡才新增的特性,也將會適當提及。

最後,這個連載將以介紹Python文法為主,初步的章節安排見文後(歡迎提出意見或建議,我會適當調整以符合大家的需要)。如果以後有能力及時間,我會考慮繼續寫一些GUI、Web開發等相關的內容。

OK,下面正式開始。

0.1  安裝和配置Python開發環境

在Python的官方網站可以下載到Windows下的安裝包(目前是2.6.4版本),按照提示一路Next下去就可以了。記得安裝完成後將Python所在的目錄(如C:\Python26)加入系統PATH變數。

Python的安裝包內建了一個簡單的整合式開發環境——IDLE,你也可以選一個自己喜歡的IDE。我個人推薦PythonWin,它的文法提示功能很不錯,適合初學者使用(參見我的另一篇文章《Python IDE的選擇》)

0.2  第一個程式:Hello, world!

現在你可以開啟IDLE或PythonWin,建立一個py為副檔名的Python指令檔,輸入以下內容:

代碼1:第一個Python程式

1 print "Hello, world!"

 

 

儲存並運行它,如果輸出 >>> Hello, world! ,說明你已經成功編寫了第一個Python程式,congratulations!

上面的“Hello World”幾乎是學習任何一門新語言的必經之路,正如提出這個程式的Simon Cozens所說:“它是編程之神的傳統咒語,可以協助你更好的學習語言”。

為了比較Python和C#在編碼風格等方面的差異,下邊給出一個稍複雜些的“Hello, world”程式以及它的C#對照版本。

 

代碼2:唐僧版的Hello, world程式

 1 # -*- coding: utf-8 -*-
2  """
3 我的第2個Python程式
4 僅為和C#作對比,謝絕效仿:)
5  """
6  import sys
7  def Main():
8 sys.stdout.write("Hello, world!\n")
9  #下面的語句看起來很怪,一會我們再解釋它是幹什麼滴
10  if __name__ =="__main__":
11 Main()

 

注意,代碼2第1行# -*- coding: utf-8 -*-,是為了讓Python支援中文,這個是必須的。如果你嫌麻煩,可以在IDE裡作一個只包含這一行代碼的模版檔案,以後每次建立Python指令碼的時候自動開啟這個模版,這樣會比較省事。

代碼3:C#的對照版本

 1 /*
2 我的第1001個C#程式
3 可能還不到,沒寫過這麼多
4  */
5  using System;
6  class Program{
7 static void Main(){
8 if (1==1) //幹什嗎?要搞SQL注入啊?
9   Console.WriteLine("Hello, world!");
10 }
11 }

 

 

0.3  認識二者最基本的差異0.3.1  差異之一:編碼風格

比較代碼2、3,可以很容易看出兩種語言在編碼風格上的差異,下面分別來說。

(1)代碼塊與縮排

C#使用C/C++風格的編碼形式,除了要求用{}組織代碼塊外,語句間的縮排可以是任意的。

Python強制所有程式都有相同的編碼風格,它通過縮排來組織代碼塊。縮排相同的語句被認為是處於同一個代碼塊中,在if/else等語句及函數定義式末尾會有一個冒號,指示代碼塊的開始。Python這種強制縮排的做法可以省去{}或者begin/end等,使程式的結構更為清晰(有的人認為恰好相反),同時也減少了無效的程式碼數。

此外需要注意,盡量使用4個空格作為Python代碼的一個縮排單位,最好不使用Tab,更不要混用Tab和空格,這也算是Python的一個非強制性約定吧。

(2)語句結尾

C#語句用分號結尾,Python不用任何符號(類似BASIC)。

實際上Python也可以使用分號結尾,像這樣 a = 1 ; b =2 ; c = 3 ; print a,b,c ,不過Python中這種風格多用於調試,應為你可以很容易注釋掉這一行就刪除了所有調試代碼。

另外,當一行很長時,Python可以用 \ 符號折行顯示代碼。

(3)注釋方法

C#用//進行單行注釋,用/* */進行多行注釋;而Python用#符號進行單行注釋,用三引號(可單可雙)進行多行注釋。

(4)條件運算式

C#的條件運算式必須要加括弧,見代碼3第8行;而Python的條件運算式加不加括弧均可(Python程式員一般不加,C/C++/C#程式員一般會加:)

0.3.2  差異之二:入口方法

C#語言必須要有入口方法Main(),這是程式開始執行的地方。

Python語言中沒有入口方法(函數),作為解釋型的語言,Python代碼會自動從頭執行(所以在代碼2中除了第8行,其它行均屬於廢話)。

如過你對這點不習慣,可以使用Python代碼的內建屬性__name__。__name__屬性會根據Python代碼的運行條件變化:當Python代碼以單個檔案運行時,__name__便等於"__main__",當你以模組形式匯入使用Python代碼時,__name__屬性便是這個模組的名字。

當然,Python中的__name__屬性並不是為了照顧C/C++/C#程式員的編程習慣而準備的,它主要目的是用於模組測試。想象一下在C#中編寫一個組件或類代碼時,一般還得同時編寫一個調用程式來測試它。而Python中可以把二者合二為一,這就是__name__屬性的真正作用。

0.3.3  差異之三:import和using

在Python寫的代碼2中,我們首先import sys,這是匯入了Python的sys模組,然後在代碼裡我們可以引用sys模組中的對象stdout及它的write方法。在Python中這是必須的,否則你無法調用sys模組中的任何東西。

在C#寫的代碼3中,我們首先using System,這是引入System命名空間,using表明該程式正在使用給定命名空間下的名稱(如Console)。對C#這是可選的,如果不事先using System,你可以在代碼中使用全限定名,如System.Console.WriteLine。

簡單的說,Python中的import相當於C#中的程式集引用。一個程式集可能包括一個或多個命名空間,C#中的using是用來引入命名空間的。Python如果想實現和using類似的功能,就需要用到from import語句。例如對於代碼2,可以將import sys改寫為from sys import *,這樣在程式中就可以直接使用stdout.write了。

最後,import可以出現在代碼的任何位置,只要在引用它之前出現就可以。不過為了提高程式可讀性,建議還是在所有代碼開頭書寫import。

 

0.4  小結

作為Python語言的入門,本章沒有涉及到過多的編程細節,主要比較了C#與Python兩種語言在編碼風格等方面最基本的差別,要點如下:

(1)Python使用強制縮排的編碼風格,並以此組織代碼塊;
(2)Python語句結尾不用分號;
(3)Python標明注釋用#(單行)或三引號(多行);
(4)Python語言沒有入口方法(Main),代碼會從頭到尾順序執行;
(5)Python語言用import引入所需要的模組(關於模組和包的具體內容將在第6部分介紹,見文末目錄)

以上這幾點是C#程式員初學Python時最易犯錯誤的地方,希望引起大家注意。好了,今天就先到這裡。

 

進一步閱讀的參考:
[1]《Python語言簡介-Python是什嗎?》,一個寫得比較有趣的Python介紹。
[2]《python 創始人訪談錄2: python 的起源,特點和未來 》,我們可以從中瞭解到Python為什麼會有這種編碼風格。
[3]《我的名字叫Python》,一個面向C++程式員的Python使用手冊。如果你是C/C++程式員,我向你推薦這本書。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.