Python由Guido Van Rossum發明於90年代初期,是目前最流行的程式語言之一,因其語法的清晰簡潔我愛上了Python,其程式碼基本上可以 說是可執行的虛擬碼。
非常歡迎反饋!你可以通過推特@louiedinh或louiedinh AT gmail聯絡我。
備註:本文是專門針對Python 2.7的,但應該是適用於Python 2.x的。很快我也會為Python 3寫這樣的一篇文章!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 |
# 單行註釋以井字元開頭 """ 我們可以使用三個雙引號(")或單引號(') 來編寫多行註釋 """ ########################################################## ## 1. 基本資料型別和操作符 ########################################################## # 數字 3 #=> 3 # 你預想的數學運算 1 + 1 #=> 2 8 - 1 #=> 7 10 * 2 #=> 20 35 / 5 #=> 7 # 除法略顯詭異。整數相除會自動向下取小於結果的最大整數 11 / 4 #=> 2 # 還有浮點數和浮點數除法(譯註:除數和被除數兩者至少一個為浮點數,結果才會是浮點數) 2.0 # 這是一個浮點數 5.0 / 2.0 #=> 2.5 額...語法更明確一些 # 使用括號來強制優先順序 (1 + 3) * 2 #=> 8 # 布林值也是基本型別資料 True False # 使用not來求反 not True #=> False not False #=> True # 相等比較使用== 1 == 1 #=> True 2 == 1 #=> False # 不相等比較使用!= 1 != 1 #=> False 2 != 1 #=> True # 更多的比較方式 1 < 10 #=> True 1 > 10 #=> False 2 <= 2 #=> True 2 >= 2 #=> True # 比較操作可以串接! 1 < 2 < 3 #=> True 2 < 3 < 2 #=> False # 可以使用"或'建立字串 "This is a string." 'This is also a string.' # 字串也可以相加! "Hello " + "world!" #=> "Hello world!" # 字串可以看作是一個字元列表 "This is a string"[0] #=> 'T' # None是一個物件 None #=> None #################################################### ## 2. 變數與資料容器 #################################################### # 列印輸出非常簡單 print "I'm Python. Nice to meet you!" # 賦值之前不需要宣告變數 some_var = 5 # 約定使用 小寫_字母_和_下劃線 的命名方式 some_var #=> 5 # 訪問之前未賦值的變數會產生一個異常 try: some_other_var except NameError: print "Raises a name error" # 賦值時可以使用條件表示式 some_var = a if a > b else b # 如果a大於b,則將a賦給some_var, # 否則將b賦給some_var # 列表用於儲存資料序列 li = [] # 你可以一個預先填充的列表開始 other_li = [4, 5, 6] # 使用append將資料新增到列表的末尾 li.append(1) #li現在為[1] li.append(2) #li現在為[1, 2] li.append(4) #li現在為[1, 2, 4] li.append(3) #li現在為[1, 2, 4, 3] # 使用pop從列表末尾刪除資料 li.pop() #=> 3,li現在為[1, 2, 4] # 把剛剛刪除的資料存回來 li.append(3) # 現在li再一次為[1, 2, 4, 3] # 像訪問陣列一樣訪問列表 li[0] #=> 1 # 看看最後一個元素 li[-1] #=> 3 # 越界訪問會產生一個IndexError try: li[4] # 丟擲一個IndexError異常 except IndexError: print "Raises an IndexError" # 可以通過分片(slice)語法來檢視列表中某個區間的資料 # 以數學角度來說,這是一個閉合/開放區間 li[1:3] #=> [2, 4] # 省略結束位置 li[2:] #=> [4, 3] # 省略開始位置 li[:3] #=> [1, 2, 4] # 使用del從列表中刪除任意元素 del li[2] #li現在為[1, 2, 3] # 列表可以相加 li + other_li #=> [1, 3, 3, 4, 5, 6] - 注意:li和other_li並未改變 # 以extend來連結列表 li.extend(other_li) # 現在li為[1, 2, 3, 4, 5, 6] # 以in來檢測列表中是否存在某元素 1 in li #=> True # 以len函式來檢測列表長度 len(li) #=> 6 # 元組類似列表,但不可變 tup = (1, 2, 3) tup[0] #=> 1 try: tup[0] = 3 # 丟擲一個TypeError異常 except TypeError: print "Tuples cannot be mutated." # 可以在元組上使用和列表一樣的操作 len(tup) #=> 3 tup + (4, 5, 6) #=> (1, 2, 3, 4, 5, 6) tup[:2] #=> (1, 2) 2 in tup #=> True # 可以將元組解包到變數 a, b, c = (1, 2, 3) # 現在a等於1,b等於2,c等於3 # 如果你省略括號,預設也會建立元組 d, e, f = 4, 5, 6 # 看看兩個變數互換值有多簡單 e, d = d, e #現在d為5,e為4 # 字典儲存對映關係 empty_dict = {} # 這是一個預先填充的字典 filled_dict = {"one": 1, "two": 2, "three": 3} # 以[]語法查詢值 filled_dict['one'] #=> 1 # 以列表形式獲取所有的鍵 filled_dict.keys() #=> ["three", "two", "one"] # 注意 - 字典鍵的順序是不確定的 # 你的結果也許和上面的輸出結果並不一致 # 以in來檢測字典中是否存在某個鍵 "one" in filled_dict #=> True 1 in filled_dict #=> False # 試圖使用某個不存在的鍵會丟擲一個KeyError異常 filled_dict['four'] #=> 丟擲KeyError異常 # 使用get方法來避免KeyError filled_dict.get("one") #=> 1 filled_dict.get("four") #=> None # get方法支援一個預設引數,不存在某個鍵時返回該預設引數值 filled_dict.get("one", 4) #=> 1 filled_dict.get("four", 4) #=> 4 # setdefault方法是一種新增新的鍵-值對到字典的安全方式 filled_dict.setdefault("five", 5) #filled_dict["five"]設定為5 filled_dict.setdefault("five", 6) #filled_dict["five"]仍為5 # 集合 empty_set = set() # 以幾個值初始化一個集合 filled_set = set([1, 2, 2, 3, 4]) # filled_set現為set([1, 2, 3, 4, 5]) # 以&執行集合交運算 other_set = set([3, 4, 5, 6]) filled_set & other_set #=> set([3, 4, 5]) # 以|執行集合並運算 filled_set | other_set #=> set([1, 2, 3, 4, 5, 6]) # 以-執行集合差運算 set([1, 2, 3, 4]) - set([2, 3, 5]) #=> set([1, 4]) # 以in來檢測集合中是否存在某個值 2 in filled_set #=> True 10 in filled_set #=> False #################################################### ## 3. 控制流程 #################################################### # 建立個變數 some_var = 5 # 以下是一個if語句。縮排在Python是有重要意義的。 # 列印 "some_var is smaller than 10" if some_var > 10: print "some_var is totally bigger than 10." elif some_var < 10: print "some_var is smaller than 10." else: print "some_var is indeed 10." """ For迴圈在列表上迭代 輸出: dog is a mammal cat is a mammal mouse is a mammal """ for animal in ["dog", "cat", "mouse"]: # 可以使用%來插補格式化字串 print "%s is a mammal" % animal """ while迴圈直到未滿足某個條件。 輸出: 0 1 2 3 """ x = 0 while x < 4: print x x += 1 # x = x + 1的一種簡寫 # 使用try/except塊來處理異常 # 對Python 2.6及以上版本有效 try: # 使用raise來丟擲一個錯誤 raise IndexError("This is an index error") except IndexError as e: pass # pass就是什麼都不幹。通常這裡用來做一些恢復工作 # 對於Python 2.7及以下版本有效 try: raise IndexError("This is an index error") except IndexError, e: # 沒有"as",以逗號替代 pass #################################################### ## 4. 函式 #################################################### # 使用def來建立新函式 def add(x, y): print "x is %s and y is %s" % (x, y) return x + y # 以一個return語句來返回值 # 以引數呼叫函式 add(5, 6) #=> 11 並輸出 "x is 5 and y is 6" # 另一種呼叫函式的方式是關鍵字引數 add(x=5, y=6) # 關鍵字引數可以任意順序輸入 # 可定義接受可變數量的位置引數的函式 def varargs(*args): return args varargs(1, 2, 3) #=> (1, 2, 3) # 也可以定義接受可變數量關鍵字引數的函式 def keyword_args(**kwargs): return kwargs # 呼叫一下該函式看看會發生什麼 keyword_args(big="foot", loch="ness") #=> {"big": "foo", "loch": "ness"} # 也可以一次性接受兩種引數 def all_the_args(*args, **kwargs): print args print kwargs """ all_the_args(1, 2, a=3, b=4)輸出: [1, 2] {"a": 3, "b": 4} """ # 在呼叫一個函式時也可以使用*和** args = (1, 2, 3, 4) kwargs = {"a": 3, "b": 4} foo(*args) #等價於foo(1, 2, 3, 4) foo(**kwargs) # 等價於foo(a=3, b=4) foo(*args, **kwargs) # 等價於foo(1, 2, 3, 4, a=3, b=4) # Python的函式是一等函式 def create_adder(x): def adder(y): return x + y return adder add_10 = create_adder(10) add_10(3) #=> 13 # 也有匿名函式 (lamda x: x > 2)(3) #=> True # 有一些內建的高階函式 map(add_10, [1, 2, 3]) #=> [11, 12, 13] filter(lamda x: x > 5, [3, 4, 5, 6, 7]) #=>[6, 7] # 可以使用列表推導來實現對映和過濾 [add_10(i) for i in [1, 2, 3]] #=> [11, 13, 13] [x for x in [3, 4, 5, 6,7 ] if x > 5] #=> [6, 7] #################################################### ## 5. 類 #################################################### # 建立一個子類繼承自object來得到一個類 class Human(object): # 類屬性。在該類的所有示例之間共享 species = "H. sapiens" # 基本初始化構造方法 def __init__(self, name): # 將引數賦值給例項的name屬性 self.name = name # 例項方法。所有示例方法都以self為第一個引數 def say(self, msg): return "%s: %s" % (self.name, msg) # 類方法由所有例項共享 # 以呼叫類為第一個引數進行呼叫 @classmethod def get_species(cls): return cls.species # 靜態方法的呼叫不需要一個類或例項的引用 @staticmethod def grunt(): return "*grunt*" # 例項化一個類 i = Human(name="Ian") print i.say("hi") # 輸出"Ian: hi" j = Human("Joel") print j.say("hello") # 輸出"Joel: hello" # 呼叫類方法 i.get_species() #=> "H. sapiens" # 修改共享屬性 Human.species = "H. neanderthalensis" i.get_species() #=> "H. neanderthalensis" j.get_species() #=> "H. neanderthalensis" # 呼叫靜態方法 Human.grunt() #=> "*grunt*" {% endhighlight %} |
進一步閱讀
想要學習更多?試試笨方法學習Python。