日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python語法速覽與實(shí)戰(zhàn)清單

本文是對(duì)于 現(xiàn)代 Python 開發(fā):語法基礎(chǔ)與工程實(shí)踐的總結(jié),更多 Python 相關(guān)資料參考 Python 學(xué)習(xí)與實(shí)踐資料索引;本文參考了 Python Crash Course - Cheat Sheets,pysheeet 等。本文僅包含筆者在日常工作中經(jīng)常使用的,并且認(rèn)為較為關(guān)鍵的知識(shí)點(diǎn)與語法,如果想要進(jìn)一步學(xué)習(xí) Python 相關(guān)內(nèi)容或者對(duì)于機(jī)器學(xué)習(xí)與數(shù)據(jù)挖掘方向感興趣,可以參考程序猿的數(shù)據(jù)科學(xué)與機(jī)器學(xué)習(xí)實(shí)戰(zhàn)手冊(cè)。

站在用戶的角度思考問題,與客戶深入溝通,找到浦北網(wǎng)站設(shè)計(jì)與浦北網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋浦北地區(qū)。

基礎(chǔ)語法

Python 是一門高階、動(dòng)態(tài)類型的多范式編程語言;定義 Python 文件的時(shí)候我們往往會(huì)先聲明文件編碼方式:

 
 
 
  1. # 指定腳本調(diào)用方式
  2. #!/usr/bin/env python
  3. # 配置 utf-8 編碼
  4. # -*- coding: utf-8 -*-
  5. # 配置其他編碼
  6. # -*- coding:  -*-
  7. # Vim 中還可以使用如下方式
  8. # vim:fileencoding=

人生苦短,請(qǐng)用 Python,大量功能強(qiáng)大的語法糖的同時(shí)讓很多時(shí)候 Python 代碼看上去有點(diǎn)像偽代碼。譬如我們用 Python 實(shí)現(xiàn)的簡易的快排相較于 Java 會(huì)顯得很短小精悍:

 
 
 
  1. def quicksort(arr):
  2.     if len(arr) <= 1:
  3.         return arr
  4.     pivot = arr[len(arr) / 2]
  5.     left = [x for x in arr if x < pivot]
  6.     middle = [x for x in arr if x == pivot]
  7.     right = [x for x in arr if x > pivot]
  8.     return quicksort(left) + middle + quicksort(right)
  9.     
  10. print quicksort([3,6,8,10,1,2,1])
  11. # Prints "[1, 1, 2, 3, 6, 8, 10]"

控制臺(tái)交互

可以根據(jù) __name__ 關(guān)鍵字來判斷是否是直接使用 python 命令執(zhí)行某個(gè)腳本,還是外部引用;Google 開源的 fire 也是不錯(cuò)的快速將某個(gè)類封裝為命令行工具的框架:

 
 
 
  1. import fire
  2. class Calculator(object):
  3.   """A simple calculator class."""
  4.   def double(self, number):
  5.     return 2 * number
  6. if __name__ == '__main__':
  7.   fire.Fire(Calculator)
  8. # python calculator.py double 10  # 20
  9. # python calculator.py double --number=15  # 30

Python 2 中 print 是表達(dá)式,而 Python 3 中 print 是函數(shù);如果希望在 Python 2 中將 print 以函數(shù)方式使用,則需要自定義引入:

 
 
 
  1. from __future__ import print_function

我們也可以使用 pprint 來美化控制臺(tái)輸出內(nèi)容:

 
 
 
  1. import pprint
  2. stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni']
  3. pprint.pprint(stuff)
  4. # 自定義參數(shù)
  5. pp = pprint.PrettyPrinter(depth=6)
  6. tup = ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead',('parrot', ('fresh fruit',))))))))
  7. pp.pprint(tup)

模塊

Python 中的模塊(Module)即是 Python 源碼文件,其可以導(dǎo)出類、函數(shù)與全局變量;當(dāng)我們從某個(gè)模塊導(dǎo)入變量時(shí),函數(shù)名往往就是命名空間(Namespace)。而 Python 中的包(Package)則是模塊的文件夾,往往由 __init__.py 指明某個(gè)文件夾為包:

 
 
 
  1. # 文件目錄
  2. someDir/
  3.     main.py
  4.     siblingModule.py
  5. # siblingModule.py
  6. def siblingModuleFun():
  7.     print('Hello from siblingModuleFun')
  8.     
  9. def siblingModuleFunTwo():
  10.     print('Hello from siblingModuleFunTwo')
  11. import siblingModule
  12. import siblingModule as sibMod
  13. sibMod.siblingModuleFun()
  14. from siblingModule import siblingModuleFun
  15. siblingModuleFun()
  16. try:
  17.     # Import 'someModuleA' that is only available in Windows
  18.     import someModuleA
  19. except ImportError:
  20.     try:
  21.         # Import 'someModuleB' that is only available in Linux
  22.         import someModuleB
  23.     except ImportError:

Package 可以為某個(gè)目錄下所有的文件設(shè)置統(tǒng)一入口:

 
 
 
  1. someDir/
  2.     main.py
  3.     subModules/
  4.         __init__.py
  5.         subA.py
  6.         subSubModules/
  7.             __init__.py
  8.             subSubA.py
  9. # subA.py
  10. def subAFun():
  11.     print('Hello from subAFun')
  12.     
  13. def subAFunTwo():
  14.     print('Hello from subAFunTwo')
  15. # subSubA.py
  16. def subSubAFun():
  17.     print('Hello from subSubAFun')
  18.     
  19. def subSubAFunTwo():
  20.     print('Hello from subSubAFunTwo')
  21. # __init__.py from subDir
  22. # Adds 'subAFun()' and 'subAFunTwo()' to the 'subDir' namespace 
  23. from .subA import *
  24. # The following two import statement do the same thing, they add 'subSubAFun()' and 'subSubAFunTwo()' to the 'subDir' namespace. The first one assumes '__init__.py' is empty in 'subSubDir', and the second one, assumes '__init__.py' in 'subSubDir' contains 'from .subSubA import *'.
  25. # Assumes '__init__.py' is empty in 'subSubDir'
  26. # Adds 'subSubAFun()' and 'subSubAFunTwo()' to the 'subDir' namespace
  27. from .subSubDir.subSubA import *
  28. # Assumes '__init__.py' in 'subSubDir' has 'from .subSubA import *'
  29. # Adds 'subSubAFun()' and 'subSubAFunTwo()' to the 'subDir' namespace
  30. from .subSubDir import *
  31. # __init__.py from subSubDir
  32. # Adds 'subSubAFun()' and 'subSubAFunTwo()' to the 'subSubDir' namespace
  33. from .subSubA import *
  34. # main.py
  35. import subDir
  36. subDir.subAFun() # Hello from subAFun
  37. subDir.subAFunTwo() # Hello from subAFunTwo
  38. subDir.subSubAFun() # Hello from subSubAFun
  39. subDir.subSubAFunTwo() # Hello from subSubAFunTwo

表達(dá)式與控制流

條件選擇

Python 中使用 if、elif、else 來進(jìn)行基礎(chǔ)的條件選擇操作:

 
 
 
  1. if x < 0:
  2.      x = 0
  3.      print('Negative changed to zero')
  4.  elif x == 0:
  5.      print('Zero')
  6.  else:
  7.      print('More')

Python 同樣支持 ternary conditional operator:

 
 
 
  1. a if condition else b

也可以使用 Tuple 來實(shí)現(xiàn)類似的效果:

 
 
 
  1. # test 需要返回 True 或者 False
  2. (falseValue, trueValue)[test]
  3. # 更安全的做法是進(jìn)行強(qiáng)制判斷
  4. (falseValue, trueValue)[test == True]
  5. # 或者使用 bool 類型轉(zhuǎn)換函數(shù)
  6. (falseValue, trueValue)[bool()]

循環(huán)遍歷

for-in 可以用來遍歷數(shù)組與字典:

 
 
 
  1. words = ['cat', 'window', 'defenestrate']
  2. for w in words:
  3.     print(w, len(w))
  4. # 使用數(shù)組訪問操作符,能夠迅速地生成數(shù)組的副本
  5. for w in words[:]:
  6.     if len(w) > 6:
  7.         words.insert(0, w)
  8. # words -> ['defenestrate', 'cat', 'window', 'defenestrate']

如果我們希望使用數(shù)字序列進(jìn)行遍歷,可以使用 Python 內(nèi)置的 range 函數(shù):

 
 
 
  1. a = ['Mary', 'had', 'a', 'little', 'lamb']
  2. for i in range(len(a)):
  3.     print(i, a[i])

基本數(shù)據(jù)類型

可以使用內(nèi)建函數(shù)進(jìn)行強(qiáng)制類型轉(zhuǎn)換(Casting):

 
 
 
  1. int(str)
  2. float(str)
  3. str(int)
  4. str(float)

Number: 數(shù)值類型

 
 
 
  1. x = 3
  2. print type(x) # Prints ""
  3. print x       # Prints "3"
  4. print x + 1   # Addition; prints "4"
  5. print x - 1   # Subtraction; prints "2"
  6. print x * 2   # Multiplication; prints "6"
  7. print x ** 2  # Exponentiation; prints "9"
  8. x += 1
  9. print x  # Prints "4"
  10. x *= 2
  11. print x  # Prints "8"
  12. y = 2.5
  13. print type(y) # Prints ""
  14. print y, y + 1, y * 2, y ** 2 # Prints "2.5 3.5 5.0 6.25"

布爾類型

Python 提供了常見的邏輯操作符,不過需要注意的是 Python 中并沒有使用 &&、|| 等,而是直接使用了英文單詞。

 
 
 
  1. t = True
  2. f = False
  3. print type(t) # Prints ""
  4. print t and f # Logical AND; prints "False"
  5. print t or f  # Logical OR; prints "True"
  6. print not t   # Logical NOT; prints "False"
  7. print t != f  # Logical XOR; prints "True" 

String: 字符串

Python 2 中支持 Ascii 碼的 str() 類型,獨(dú)立的 unicode() 類型,沒有 byte 類型;而 Python 3 中默認(rèn)的字符串為 utf-8 類型,并且包含了 byte 與 bytearray 兩個(gè)字節(jié)類型:

 
 
 
  1. type("Guido") # string type is str in python2
  2. # 使用 __future__ 中提供的模塊來降級(jí)使用 Unicode
  3. from __future__ import unicode_literals
  4. type("Guido") # string type become unicode

Python 字符串支持分片、模板字符串等常見操作:

 
 
 
  1. var1 = 'Hello World!'
  2. var2 = "Python Programming"
  3. print "var1[0]: ", var1[0]
  4. print "var2[1:5]: ", var2[1:5]
  5. # var1[0]:  H
  6. # var2[1:5]:  ytho
  7. print "My name is %s and weight is %d kg!" % ('Zara', 21)
  8. # My name is Zara and weight is 21 kg!
  9. str[0:4]
  10. len(str)
  11. string.replace("-", " ")
  12. ",".join(list)
  13. "hi {0}".format('j')
  14. str.find(",")
  15. str.index(",")   # same, but raises IndexError
  16. str.count(",")
  17. str.split(",")
  18. str.lower()
  19. str.upper()
  20. str.title()
  21. str.lstrip()
  22. str.rstrip()
  23. str.strip()
  24. str.islower()
  25. # 移除所有的特殊字符
  26. re.sub('[^A-Za-z0-9]+', '', mystring) 

如果需要判斷是否包含某個(gè)子字符串,或者搜索某個(gè)字符串的下標(biāo):

 
 
 
  1. # in 操作符可以判斷字符串
  2. if "blah" not in somestring: 
  3.     continue
  4. # find 可以搜索下標(biāo)
  5. s = "This be a string"
  6. if s.find("is") == -1:
  7.     print "No 'is' here!"
  8. else:
  9.     print "Found 'is' in the string."

Regex: 正則表達(dá)式

 
 
 
  1. import re
  2. # 判斷是否匹配
  3. re.match(r'^[aeiou]', str)
  4. # 以第二個(gè)參數(shù)指定的字符替換原字符串中內(nèi)容
  5. re.sub(r'^[aeiou]', '?', str)
  6. re.sub(r'(xyz)', r'\1', str)
  7. # 編譯生成獨(dú)立的正則表達(dá)式對(duì)象
  8. expr = re.compile(r'^...$')
  9. expr.match(...)
  10. expr.sub(...)

下面列舉了常見的表達(dá)式使用場景:

 
 
 
  1. # 檢測是否為 HTML 標(biāo)簽
  2. re.search('<[^/>][^>]*>', '')
  3. # 常見的用戶名密碼
  4. re.match('^[a-zA-Z0-9-_]{3,16}$', 'Foo') is not None
  5. re.match('^\w|[-_]{3,16}$', 'Foo') is not None
  6. # Email
  7. re.match('^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$', 'hello.world@cdxwcx.com')
  8. # Url
  9. exp = re.compile(r'''^(https?:\/\/)? # match http or https
  10.                 ([\da-z\.-]+)            # match domain
  11.                 \.([a-z\.]{2,6})         # match domain
  12.                 ([\/\w \.-]*)\/?$        # match api or file
  13.                 ''', re.X)
  14. exp.match('www.google.com')
  15. # IP 地址
  16. exp = re.compile(r'''^(?:(?:25[0-5]
  17.                      |2[0-4][0-9]
  18.                      |[1]?[0-9][0-9]?)\.){3}
  19.                      (?:25[0-5]
  20.                      |2[0-4][0-9]
  21.                      |[1]?[0-9][0-9]?)$''', re.X)
  22. exp.match('192.168.1.1')

集合類型

List: 列表

Operation: 創(chuàng)建增刪

 
 
 
  1. l = []
  2. l = list()
  3. # 使用字符串的 split 方法,可以將字符串轉(zhuǎn)化為列表
  4. str.split(".")
  5. # 如果需要將數(shù)組拼裝為字符串,則可以使用 join 
  6. list1 = ['1', '2', '3']
  7. str1 = ''.join(list1)
  8. # 如果是數(shù)值數(shù)組,則需要先進(jìn)行轉(zhuǎn)換
  9. list1 = [1, 2, 3]
  10. str1 = ''.join(str(e) for e in list1)

可以使用 append 與 extend 向數(shù)組中插入元素或者進(jìn)行數(shù)組連接

 
 
 
  1. x = [1, 2, 3]
  2. x.append([4, 5]) # [1, 2, 3, [4, 5]]
  3. x.extend([4, 5]) # [1, 2, 3, 4, 5],注意 extend 返回值為 None

可以使用 pop、slices、del、remove 等移除列表中元素:

 
 
 
  1. myList = [10,20,30,40,50]
  2. # 彈出第二個(gè)元素
  3. myList.pop(1) # 20
  4. # myList: myList.pop(1)
  5. # 如果不加任何參數(shù),則默認(rèn)彈出***一個(gè)元素
  6. myList.pop()
  7. # 使用 slices 來刪除某個(gè)元素
  8. a = [  1, 2, 3, 4, 5, 6 ]
  9. index = 3 # Only Positive index
  10. a = a[:index] + a[index+1 :]
  11. # 根據(jù)下標(biāo)刪除元素
  12. myList = [10,20,30,40,50]
  13. rmovIndxNo = 3
  14. del myList[rmovIndxNo] # myList: [10, 20, 30, 50]
  15. # 使用 remove 方法,直接根據(jù)元素刪除
  16. letters = ["a", "b", "c", "d", "e"]
  17. numbers.remove(numbers[1])
  18. print(*letters) # used a * to make it unpack you don't have to

Iteration: 索引遍歷

你可以使用基本的 for 循環(huán)來遍歷數(shù)組中的元素,就像下面介個(gè)樣紙:

 
 
 
  1. animals = ['cat', 'dog', 'monkey']
  2. for animal in animals:
  3.     print animal
  4. # Prints "cat", "dog", "monkey", each on its own line.

如果你在循環(huán)的同時(shí)也希望能夠獲取到當(dāng)前元素下標(biāo),可以使用 enumerate 函數(shù):

 
 
 
  1. animals = ['cat', 'dog', 'monkey']
  2. for idx, animal in enumerate(animals):
  3.     print '#%d: %s' % (idx + 1, animal)
  4. # Prints "#1: cat", "#2: dog", "#3: monkey", each on its own line

Python 也支持切片(Slices):

 
 
 
  1. nums = range(5)    # range is a built-in function that creates a list of integers
  2. print nums         # Prints "[0, 1, 2, 3, 4]"
  3. print nums[2:4]    # Get a slice from index 2 to 4 (exclusive); prints "[2, 3]"
  4. print nums[2:]     # Get a slice from index 2 to the end; prints "[2, 3, 4]"
  5. print nums[:2]     # Get a slice from the start to index 2 (exclusive); prints "[0, 1]"
  6. print nums[:]      # Get a slice of the whole list; prints ["0, 1, 2, 3, 4]"
  7. print nums[:-1]    # Slice indices can be negative; prints ["0, 1, 2, 3]"
  8. nums[2:4] = [8, 9] # Assign a new sublist to a slice
  9. print nums         # Prints "[0, 1, 8, 9, 4]"

Comprehensions: 變換

Python 中同樣可以使用 map、reduce、filter,map 用于變換數(shù)組:

 
 
 
  1. # 使用 map 對(duì)數(shù)組中的每個(gè)元素計(jì)算平方
  2. items = [1, 2, 3, 4, 5]
  3. squared = list(map(lambda x: x**2, items))
  4. # map 支持函數(shù)以數(shù)組方式連接使用
  5. def multiply(x):
  6.     return (x*x)
  7. def add(x):
  8.     return (x+x)
  9. funcs = [multiply, add]
  10. for i in range(5):
  11.     value = list(map(lambda x: x(i), funcs))
  12.     print(value)

reduce 用于進(jìn)行歸納計(jì)算:

 
 
 
  1. # reduce 將數(shù)組中的值進(jìn)行歸納
  2. from functools import reduce
  3. product = reduce((lambda x, y: x * y), [1, 2, 3, 4])
  4. # Output: 24

filter 則可以對(duì)數(shù)組進(jìn)行過濾:

 
 
 
  1. number_list = range(-5, 5)
  2. less_than_zero = list(filter(lambda x: x < 0, number_list))
  3. print(less_than_zero)
  4. # Output: [-5, -4, -3, -2, -1]

字典類型

創(chuàng)建增刪

 
 
 
  1. d = {'cat': 'cute', 'dog': 'furry'}  # 創(chuàng)建新的字典
  2. print d['cat']       # 字典不支持點(diǎn)(Dot)運(yùn)算符取值

如果需要合并兩個(gè)或者多個(gè)字典類型:

 
 
 
  1. # python 3.5
  2. z = {**x, **y}
  3. # python 2.7
  4. def merge_dicts(*dict_args):
  5.     """
  6.     Given any number of dicts, shallow copy and merge into a new dict,
  7.     precedence goes to key value pairs in latter dicts.
  8.     """
  9.     result = {}
  10.     for dictionary in dict_args:
  11.         result.update(dictionary)
  12.     return result

索引遍歷

可以根據(jù)鍵來直接進(jìn)行元素訪問:

 
 
 
  1. # Python 中對(duì)于訪問不存在的鍵會(huì)拋出 KeyError 異常,需要先行判斷或者使用 get
  2. print 'cat' in d     # Check if a dictionary has a given key; prints "True"
  3. # 如果直接使用 [] 來取值,需要先確定鍵的存在,否則會(huì)拋出異常
  4. print d['monkey']  # KeyError: 'monkey' not a key of d
  5. # 使用 get 函數(shù)則可以設(shè)置默認(rèn)值
  6. print d.get('monkey', 'N/A')  # Get an element with a default; prints "N/A"
  7. print d.get('fish', 'N/A')    # Get an element with a default; prints "wet"
  8. d.keys() # 使用 keys 方法可以獲取所有的鍵

可以使用 for-in 來遍歷數(shù)組:

 
 
 
  1. # 遍歷鍵
  2. for key in d:
  3. # 比前一種方式慢
  4. for k in dict.keys(): ...
  5. # 直接遍歷值
  6. for value in dict.itervalues(): ...
  7. # Python 2.x 中遍歷鍵值
  8. for key, value in d.iteritems():
  9. # Python 3.x 中遍歷鍵值
  10. for key, value in d.items():

其他序列類型

集合

 
 
 
  1. # Same as {"a", "b","c"}
  2. normal_set = set(["a", "b","c"])
  3.  
  4. # Adding an element to normal set is fine
  5. normal_set.add("d")
  6.  
  7. print("Normal Set")
  8. print(normal_set)
  9.  
  10. # A frozen set
  11. frozen_set = frozenset(["e", "f", "g"])
  12.  
  13. print("Frozen Set")
  14. print(frozen_set)
  15.  
  16. # Uncommenting below line would cause error as
  17. # we are trying to add element to a frozen set
  18. # frozen_set.add("h")

函數(shù)

函數(shù)定義

Python 中的函數(shù)使用 def 關(guān)鍵字進(jìn)行定義,譬如:

 
 
 
  1. def sign(x):
  2.     if x > 0:
  3.         return 'positive'
  4.     elif x < 0:
  5.         return 'negative'
  6.     else:
  7.         return 'zero'
  8. for x in [-1, 0, 1]:
  9.     print sign(x)
  10. # Prints "negative", "zero", "positive"

Python 支持運(yùn)行時(shí)創(chuàng)建動(dòng)態(tài)函數(shù),也即是所謂的 lambda 函數(shù):

 
 
 
  1. def f(x): return x**2
  2. # 等價(jià)于
  3. g = lambda x: x**2

參數(shù)

Option Arguments: 不定參數(shù)

 
 
 
  1. def example(a, b=None, *args, **kwargs):
  2.   print a, b
  3.   print args
  4.   print kwargs
  5. example(1, "var", 2, 3, word="hello")
  6. # 1 var
  7. # (2, 3)
  8. # {'word': 'hello'}
  9. a_tuple = (1, 2, 3, 4, 5)
  10. a_dict = {"1":1, "2":2, "3":3}
  11. example(1, "var", *a_tuple, **a_dict)
  12. # 1 var
  13. # (1, 2, 3, 4, 5)
  14. # {'1': 1, '2': 2, '3': 3}

生成器

 
 
 
  1. def simple_generator_function():
  2.     yield 1
  3.     yield 2
  4.     yield 3
  5. for value in simple_generator_function():
  6.     print(value)
  7. # 輸出結(jié)果
  8. # 1
  9. # 2
  10. # 3
  11. our_generator = simple_generator_function()
  12. next(our_generator)
  13. # 1
  14. next(our_generator)
  15. # 2
  16. next(our_generator)
  17. #3
  18. # 生成器典型的使用場景譬如***數(shù)組的迭代
  19. def get_primes(number):
  20.     while True:
  21.         if is_prime(number):
  22.             yield number
  23.         number += 1

裝飾器

裝飾器是非常有用的設(shè)計(jì)模式:

 
 
 
  1. # 簡單裝飾器
  2. from functools import wraps
  3. def decorator(func):
  4.     @wraps(func)
  5.     def wrapper(*args, **kwargs):
  6.         print('wrap function')
  7.         return func(*args, **kwargs)
  8.     return wrapper
  9. @decorator
  10. def example(*a, **kw):
  11.     pass
  12. example.__name__  # attr of function preserve
  13. # 'example'
  14. # Decorator 
  15. # 帶輸入值的裝飾器
  16. from functools import wraps
  17. def decorator_with_argument(val):
  18.   def decorator(func):
  19.     @wraps(func)
  20.     def wrapper(*args, **kwargs):
  21.       print "Val is {0}".format(val)
  22.       return func(*args, **kwargs)
  23.     return wrapper
  24.   return decorator
  25. @decorator_with_argument(10)
  26. def example():
  27.   print "This is example function."
  28. example()
  29. # Val is 10
  30. # This is example function.
  31. # 等價(jià)于
  32. def example():
  33.   print "This is example function."
  34. example = decorator_with_argument(10)(example)
  35. example()
  36. # Val is 10
  37. # This is example function.

類與對(duì)象

類定義

Python 中對(duì)于類的定義也很直接:

 
 
 
  1. class Greeter(object):
  2.     
  3.     # Constructor
  4.     def __init__(self, name):
  5.         self.name = name  # Create an instance variable
  6.         
  7.     # Instance method
  8.     def greet(self, loud=False):
  9.         if loud:
  10.             print 'HELLO, %s!' % self.name.upper()
  11.         else:
  12.             print 'Hello, %s' % self.name
  13.         
  14. g = Greeter('Fred')  # Construct an instance of the Greeter class
  15. g.greet()            # Call an instance method; prints "Hello, Fred"
  16. g.greet(loud=True)   # Call an instance method; prints "HELLO, FRED!"
  17. # isinstance 方法用于判斷某個(gè)對(duì)象是否源自某個(gè)類
  18. ex = 10
  19. isinstance(ex,int)

Managed Attributes: 受控屬性

 
 
 
  1. # property、setter、deleter 可以用于復(fù)寫點(diǎn)方法
  2. class Example(object):
  3.     def __init__(self, value):
  4.        self._val = value
  5.     @property
  6.     def val(self):
  7.         return self._val
  8.     @val.setter
  9.     def val(self, value):
  10.         if not isintance(value, int):
  11.             raise TypeError("Expected int")
  12.         self._val = value
  13.     @val.deleter
  14.     def val(self):
  15.         del self._val
  16.     @property
  17.     def square3(self):
  18.         return 2**3
  19. ex = Example(123)
  20. ex.val = "str"
  21. # Traceback (most recent call last):
  22. #   File "", line 1, in
  23. #   File "test.py", line 12, in val
  24. #     raise TypeError("Expected int")
  25. # TypeError: Expected int

類方法與靜態(tài)方法

 
 
 
  1. class example(object):
  2.   @classmethod
  3.   def clsmethod(cls):
  4.     print "I am classmethod"
  5.   @staticmethod
  6.   def stmethod():
  7. 分享名稱:Python語法速覽與實(shí)戰(zhàn)清單
    網(wǎng)站鏈接:http://www.dlmjj.cn/article/dpjoejg.html