一、欲練此功,必先自宮
從現在起,就開始真正地接觸她了,或許很多人像我一樣,不知道如何去快速掌握一門新的程式設計語言,今天貼出來一些建議,方便大家看看,這也是學習之前的十分重要的事情。雖然“欲練此功,必先自宮”太誇張,但是在學習之前,肯定要做好準備了。由於工作中使用Python,在工作前一個月就開始學習並投入到實際項目中,時隔一個月的學習,今天重溫一遍。我做的準備如下:
1.工具準備
這個在上一章學習筆記中已經做好了
2.資料準備
《Python 核心編程》
Python官方文檔
部落格園、CSDN等社區
3.入門教程準備
大約在六月份之前完成Python入門筆記。
4.心理準備
關於如何學好一門新的程式設計語言,這裡推薦閱讀:http://www.cnblogs.com/chgaowei/archive/2011/05/29/2061902.html
5.知識架構拆分準備
通過對整個Python學習過程中的架構進行拆分,利用《Python核心編程》一書中,幾乎涵蓋了所有Python知識點,但是對於像我一樣的新手來說,我還是難以掌握她的整個學習架構、流程。如果我們大致看了這一本書,就能細分她的架構,分成模組來學,這樣才能做到心中有數。下面是我拆分的架構:(由於我們先從Python基礎學習,所以這裡不考慮進階部分)
[1]、Python基礎部分:
(1).文法基礎、(2)、資料類型、(3).Python對象、(4).字串、元祖和列表、(5).映射和集合、(6).函數
[2]、流程式控制制
條件和迴圈
[3]、檔案操作
[4]、模組
[5]、物件導向
[6]、異常處理
[7]、環境部署
好了,這些準備都到位了,現在就開始學習吧,沒事的時候建議看看Python哲學
二、Python文法
我不知道自己之前是如何寫第一個Python程式的,貌似是照著《Dive Into Python》這本令人在之前學起來蛋疼的教程中寫的。一如既往地,咱們從"helloworld"開始看吧,哈哈,我們學的很多語言都是從helloworld開始的。
>>> 1 + 1 2>>> print 'hello world' hello world>>> x = 1 >>> y = 2>>> x + y3
這裡例子並不能說明什麼文法,但是能讓我們熟悉一些,比如,Python 既是 動態類型定義語言 (因為它不使用顯示資料類型聲明) , 又是 強型別定義語言 (因為一旦一個變數具有一個資料類型, 它實際上就一直是這個類型了) 、一句程式結束後並不不以分號結尾、print 可以輸出字串等。那下面就細緻講解下python文法吧
1、注釋
和很多Unix指令碼類似,Python的備註陳述式從#字元開始,如:
# print "hello world"
注意Python的#字元注釋只能實現單行注釋,或許很多人和我一樣好奇,如果要注釋掉一百多行代碼,那麼是不是敲一百多次#呢??毋庸置疑,如果我們這樣做,只能說明還是打醬油的雇的幫打醬油的人。
我們可以有如下小技巧:
(1).程式控製法:
在不影響整個程式的情況下,我們可以把一大堆要注釋掉的程式碼片段,利用if條件句進行間接注釋,也就是if屏蔽了要注釋的代碼塊的執行、可以使用 if False:、if None:、if 0:進行屏蔽處理,如下:
1 在eclipse中:2 print 'BeginMan' #輸出 3 if False: #屏蔽,if 後還可以是 0、None等一切布爾值為假的條件4 print 'hello world'5 print 'good man'6 print 'sssss'7 print 'ok!' #輸出
則if 下的代碼不會執行,也就沒輸出了。但是這個技巧呢,最好不要用,可能在很多代碼存在的情況下存在潛伏的異常。
(2).編輯器技巧
如果在eclipse下,選中多行,可以使用快速鍵ctrl+/注釋或取消注釋,這個強烈推薦,真是“工欲善其事,必先利其器”啊,對於編輯器,最好是掌握常用的快速鍵,才能提高開發效率。
(3).doc string (文檔字串)
1 def foo(params):2 """print a,b,c and return a """
三重引號(包含單引號又包含雙引號)表示一個多行字串。在開始與結束引號間的所有東西都被視為單個字串的一部分, 包括硬斷行符號和其它的引號字元。在三重引號中的任何東西都是這個函數的 doc string, 它們用來說明函數可以做什麼。 如果存在 doc string, 它必須是一個函數要定義的第一個內容( 也就是說, 在冒號後面的第一個內容 )。 在技術上不要求給出函數的 doc string, 但應該這樣做。 Python 帶來一些額外的動機: doc string 在運行時可作為函數的屬性。
2、換行(\n)
常見的分行符號,在學其他程式設計語言中經常看到。
3、反斜線(\)繼續上一行
也就是對一行一個語句的隔行,針對一些過長的語句可使用反斜線\來分解成多行,如:
1 if a>0 and \2 b<0 :3 print 'ok!'
有兩種例外情況可以不用反斜線,一種是:小括弧()、中括弧[]、花括弧{};另外一種是三引號。針對可讀性,不建議使用反斜線。
4、代碼縮排
Python 函數沒有明顯的 begin 和 end, 沒有花括弧, 用於標函數的開始和結束。 唯一的分隔字元是一個冒號 (:), 接著代碼本身是縮排的。例子可以參考上面的。注意,碼縮排十分嚴格,如果不按規律辦事,不小心的話就會出現語法錯誤,比如unexpected indent之類的。甚至有時也會出現邏輯錯誤。
參考:http://www.cnblogs.com/tt-0411/archive/2011/11/11/2245693.html
5、使用分號(;)可以在同一行書寫多個語句
如;import os; a=123; print a
注意句子末尾不要帶;建議不要這樣寫,因為會大大降低代碼的可讀性。
6、模組
每個python指令碼看做一個模組,磁碟的形式存放,可多次拆分成多個模組。使用import 匯入。
三、Python的變數
注意,與C#、Java、C/C++等程式設計語言不一樣,Python的變數沒有類型,它的類型是在記憶體中根據對象所確定的。由於涉及到Python函數部分,在本節先不講,在後面的部分會有講解。這一節就首先學學變數賦值。
Python是弱類型,無需明確指定變數類型,賦值的同時會自動宣告類型。如:
1 >>> anInt=102 >>> astr="Car"3 >>> aFloat=-1.2+34 >>> aList=[1,2,3]5 >>> aTuple=('aa','ss')6 >>> print anInt,astr,aFloat,aList,aTuple7 10 Car 1.8 [1, 2, 3] ('aa', 'ss')
我們需要注意以下幾點:
1、在Python中是通過對象的引用而不是值來賦值給變數的。
2、賦值操作符主要是"=",同時也可使用增量賦值,如 x+=1。但是沒有自增、自減操作符。
3、在C語言中,指派陳述式可以當作運算式(可以傳回值),但是在Python中指派陳述式不會傳回值,如下面的就是非法的:
>>> x=1>>> y=(x=x+1)SyntaxError: invalid syntax
4、Python支援鏈式賦值、多重賦值、多元賦值
(1).鏈式賦值:
>>> y=x=x+1>>> x,y(2, 2)
(2).多重賦值
>>> x=y=z=1>>> x,y,z(1, 1, 1)
值為1的整型對象被建立,該對象的同一引用被賦值給了x,y,z
(3).多元賦值
為什麼叫做多元賦值,在Python核心編程書中說,是作者自己其的名稱,因為等號兩邊對象都是元祖。
>>> x,y,z=1,'ssss',True>>> x,y,z(1, 'ssss', True)
x,y,z=1,'as',3(x,y,z)=1,'as',3(x,y,z)=(1,'as',3) #推薦
其中,Python變數交換實在太優雅了,如果交換x和y的值,在其他語言,如C,我們或許用一個臨時變數來完成工作。但是在Python中,你只需這樣做就行了
>>> x,y=y,x>>> x,y('ssss', 1)
四、標識符
首先變數的命名規則跟其他主流語言如C一樣,其次,Python關鍵字、標識符在Python文檔中都有,必要時可翻閱。
五、編碼風格
1 #coding=utf-8 #編碼格式 2 ''' 3 Created on 2013-3-11 4 @author: BeginMan 5 ''' 6 "this is a test module" #模組文檔 7 import os #匯入模組 8 import sys 9 s=True #全域變數(globalvariable)10 class FooClass(object): #類的定義11 "fooclass test" #類的文檔對象12 classAttribute=10 #類屬性 13 def myFunction(self): #函數定義14 "function test" #函數的文檔對象15 dataAttribute="BeginMan" #資料屬性(執行個體屬性)16 pass 17 18 if __name__=="__main__": #主程式19 inst=FooClass()20 pass21
這裡我們重點是Python的主程式。那麼什麼是Python的主程式呢,就是說無論這個模組是被別的模組匯入還是作為指令碼直接執行,都會執行這部分代碼。通常這裡不會有太多功能性代碼,而是執行模式調用不同函數。