知识点总结(基础篇)
生活随笔
收集整理的這篇文章主要介紹了
知识点总结(基础篇)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
知識點總結1
998層 獲取:sys.getrecursionlimit() 設置:sys.setrecursionlimit(3000) 3 1 ?998層 2 ?獲取:sys.getrecursionlimit() 3 ?設置:sys.setrecursionlimit(3000)
ASCII 碼一共規定了128個字符的編碼 Unicode 當然是一個很大的集合,現在的規模可以容納100多萬個符號 UTF-8 就是在互聯網上使用最廣的一種 Unicode 的實現方式。其他實現方式還包括 UTF-16(字符用兩個字節或四個字節表示)和 UTF-32(字符用四個字節表示),不過在互聯網上基本不用。重復一遍,這里的關系是,UTF-8 是 Unicode 的實現方式之一。 GBK是在國家標準GB2312基礎上擴容后兼容GB2312的標準(好像還不是國家標準)。GBK編碼專門用來解決中文編碼的,是雙字節的。不論中英文都是雙字節的 4 1 ASCII 碼一共規定了128個字符的編碼 2 Unicode 當然是一個很大的集合,現在的規模可以容納100多萬個符號 3 UTF-8 就是在互聯網上使用最廣的一種 Unicode 的實現方式。其他實現方式還包括 UTF-16(字符用兩個字節或四個字節表示)和 UTF-32(字符用四個字節表示),不過在互聯網上基本不用。重復一遍,這里的關系是,UTF-8 是 Unicode 的實現方式之一。 4 GBK是在國家標準GB2312基礎上擴容后兼容GB2312的標準(好像還不是國家標準)。GBK編碼專門用來解決中文編碼的,是雙字節的。不論中英文都是雙字節的
v1 = 1 or 3 # v1=1 v1 = 1 and 3 # v1=3 v1 = 0 and 2 and 1 # v1 = 0 v1 = 0 and 2 or 1 # v1 = 1 v1 = 0 and 2 or 1 or 4 # v1 =1 v1 = 0 or False and 1 # v1 = False 6 1 v1 = 1 or 3 ? # v1=1 2 v1 = 1 and 3 ?# v1=3 3 v1 = 0 and 2 and 1 ? ? # v1 = 0 4 v1 = 0 and 2 or 1 ? ? # v1 = 1 5 v1 = 0 and 2 or 1 or 4 ? ?# v1 =1 6 v1 = 0 or False and 1 ? ?# v1 = False
為真時的結果 if 判斷條件 else 為假時的結果(注意,沒有冒號) a = 4 r = a if a>2 else 0 4 1 為真時的結果 if 判斷條件 else 為假時的結果(注意,沒有冒號) 2 3 a = 4 4 r = a if a>2 else 0
a,b = b,a 1 1 a,b = b,a
python2: range返回真實的列表,有時會很長,占用空間 xrange返回一個列表生成器,每次遍歷內部會調用.next()函數拿到下一個元素 python3: range就是python2中的xrange 5 1 python2: 2 range返回真實的列表,有時會很長,占用空間 3 xrange返回一個列表生成器,每次遍歷內部會調用.next()函數拿到下一個元素 4 python3: 5 range就是python2中的xrange
<open file './test.txt', mode 'r' at 0x7f024288fe40> # xreadlines 返回一個生成器 ['1111111\n', '222222\n', '333333\n', '4444444\n', '5555555\n', '6666666\n', '7777777\n', '88888888\n'] # readlines 返回一個列表 2 1 <open file './test.txt', mode 'r' at 0x7f024288fe40> ? ? ? ? ? ? ? # xreadlines ? 返回一個生成器 2 ['1111111\n', '222222\n', '333333\n', '4444444\n', '5555555\n', '6666666\n', '7777777\n', '88888888\n'] ? ? ? # readlines ? 返回一個列表
int : 0 list:[] tuple:() dict:{} None 1 1 int : 0 ? ? ?list:[] ? ?tuple:() ? dict:{} ? ?None
is 判斷id是否一樣 == 判斷值是否相等 2 1 is 判斷id是否一樣 2 == 判斷值是否相等
淺拷貝指僅僅拷貝數據集合的第一層數據,深拷貝指拷貝數據集合的所有層。所以對于只有一層的數據集合來說深淺拷貝的意義是一樣的,比如字符串,數字,還有僅僅一層的字典、列表、元祖等. 直接賦值: 其實就是對象的引用(別名),賦值的兩邊指向的是同一個對象 淺拷貝(copy): 拷貝父對象,不會拷貝對象的內部的子對象 深拷貝(deepcopy):拷貝父對象,同時會開辟空間,逐層拷貝內部子對象 5 1 淺拷貝指僅僅拷貝數據集合的第一層數據,深拷貝指拷貝數據集合的所有層。所以對于只有一層的數據集合來說深淺拷貝的意義是一樣的,比如字符串,數字,還有僅僅一層的字典、列表、元祖等. 2 3 直接賦值: 其實就是對象的引用(別名),賦值的兩邊指向的是同一個對象 4 淺拷貝(copy): 拷貝父對象,不會拷貝對象的內部的子對象 5 深拷貝(deepcopy):拷貝父對象,同時會開辟空間,逐層拷貝內部子對象
Python垃圾回收主要以引用計數為主,分代回收為輔。引用計數法的原理是每個對象維護一個ob_ref,用來記錄當前對象被引用的次數,也就是來追蹤到底有多少引用指向了這個對象,當發生以下四種情況的時候,該對象的引用計數器+1 對象被創建 ?a=14 對象被引用? b=a 對象被作為參數,傳到函數中 ? func(a) 對象作為一個元素,存儲在容器中 ? List={a,”a”,”b”,2} 與上述情況相對應,當發生以下四種情況時,該對象的引用計數器-1 當該對象的別名被顯式銷毀時? del a 當該對象的引別名被賦予新的對象, ? a=26 一個對象離開它的作用域,例如 func函數執行完畢時,函數里面的局部變量的引用計數器就會減一(但是全局變量不會) 將該元素從容器中刪除時,或者容器被銷毀時。 當指向該對象的內存的引用計數器為0的時候,該內存將會被Python虛擬機銷毀 參考:http://python.jobbole.com/87843/ 14 1 Python垃圾回收主要以引用計數為主,分代回收為輔。引用計數法的原理是每個對象維護一個ob_ref,用來記錄當前對象被引用的次數,也就是來追蹤到底有多少引用指向了這個對象,當發生以下四種情況的時候,該對象的引用計數器+1 2 對象被創建 ?a=14 3 對象被引用? b=a 4 對象被作為參數,傳到函數中 ? func(a) 5 對象作為一個元素,存儲在容器中 ? List={a,”a”,”b”,2} 6 與上述情況相對應,當發生以下四種情況時,該對象的引用計數器-1 7 8 當該對象的別名被顯式銷毀時? del a 9 當該對象的引別名被賦予新的對象, ? a=26 10 一個對象離開它的作用域,例如 func函數執行完畢時,函數里面的局部變量的引用計數器就會減一(但是全局變量不會) 11 將該元素從容器中刪除時,或者容器被銷毀時。 12 當指向該對象的內存的引用計數器為0的時候,該內存將會被Python虛擬機銷毀 13 14 參考:http://python.jobbole.com/87843/
? ?v = dict.fromkeys(['k1','k2'],[]) ?
? ?v[‘k1’].append(666)
? ?print(v)
? ?v[‘k1’] = 777
? ?print(v) {'k1': [666], 'k2': [666]} {'k1': 777, 'k2': [666]} 解釋:初始k1,k2的value都是[],兩個[]實際指向同一個內存地址,[]是可變類型,一個修改另一個也會隨之變化,所以k1,k2的value都變成了[666], 而v['k1'] = 777,將k1 vlaue的地址指向了777,而k2的內存地址指向不變 6 1 {'k1': [666], 'k2': [666]} 2 {'k1': 777, 'k2': [666]} 3 4 解釋:初始k1,k2的value都是[],兩個[]實際指向同一個內存地址,[]是可變類型,一個修改另一個也會隨之變化,所以k1,k2的value都變成了[666], 5 而v['k1'] = 777,將k1 vlaue的地址指向了777,而k2的內存地址指向不變 6
filter用法:返回執行結果為TRUE的入參(入參是列表字符元組) print filter(lambda x:x*x-4,range(10)) #結果:[0, 1, 3, 4, 5, 6, 7, 8, 9] map的用法:對列表入參依次執行函數。入參為列表,有多少個列表,就應該有多少個入參。 print map(lambda x:x*x-4,range(10)) #結果:[-4, -3, 0, 5, 12, 21, 32, 45, 60, 77] reduce用法:先把sequence中第一個值和第二個值當參數傳給function,再把function的返回值和第三個值當參數傳給fuction,最終返回一個結果值 print reduce(lambda x,y:x*y-4,range(4)) # 結果:-40 6 1 filter用法:返回執行結果為TRUE的入參(入參是列表字符元組) 2 print filter(lambda x:x*x-4,range(10)) ? #結果:[0, 1, 3, 4, 5, 6, 7, 8, 9] 3 map的用法:對列表入參依次執行函數。入參為列表,有多少個列表,就應該有多少個入參。 4 print map(lambda x:x*x-4,range(10)) #結果:[-4, -3, 0, 5, 12, 21, 32, 45, 60, 77] 5 reduce用法:先把sequence中第一個值和第二個值當參數傳給function,再把function的返回值和第三個值當參數傳給fuction,最終返回一個結果值 6 print reduce(lambda x,y:x*y-4,range(4)) ?# 結果:-40
print('\n'.join(['\t'.join(["%2s*%2s=%2s"%(j,i,i*j) for j in range(1,i+1)]) for i in range(1,10)])) 1 1 print('\n'.join(['\t'.join(["%2s*%2s=%2s"%(j,i,i*j) for j in range(1,i+1)]) for i in range(1,10)]))
match()函數只檢測RE是不是在string的開始位置匹配,search()會掃描整個string查找匹配; 1 1 match()函數只檢測RE是不是在string的開始位置匹配,search()會掃描整個string查找匹配;
貪婪匹配:正則表達式一般趨向于最大長度匹配。 非貪婪匹配:匹配到結果就好。 默認是貪婪模式。在量詞后面直接加一個問號?就是非貪婪模式 3 1 貪婪匹配:正則表達式一般趨向于最大長度匹配。 2 非貪婪匹配:匹配到結果就好。 3 默認是貪婪模式。在量詞后面直接加一個問號?就是非貪婪模式
a:[0, 1, 0, 1, 0, 1, 0, 1, 0, 1] b:<generator object <genexpr> at 0x0000008CB5BD7BA0> # 生成器 2 1 a:[0, 1, 0, 1, 0, 1, 0, 1, 0, 1] 2 b:<generator object <genexpr> at 0x0000008CB5BD7BA0> ?# 生成器
將可變對象作為默認參數,若多次調用時使用默認參數,默認參數會保留上次調用時的狀態! 1 1 將可變對象作為默認參數,若多次調用時使用默認參數,默認參數會保留上次調用時的狀態!
a = '1,2,3' b= a.split(',') print(b) 3 1 a = '1,2,3' 2 b= a.split(',') 3 print(b)
a = ['1','2','3'] print([int(i) for i in a]) 2 1 a = ['1','2','3'] 2 print([int(i) for i in a])
a,b 均為整型列表, c為元組列表。 1 1 a,b 均為整型列表, c為元組列表。
list1 = [i ** 2 for i in range(1, 11)] print(list1) 2 1 list1 = [i ** 2 for i in range(1, 11)] 2 print(list1)
list2 = [1,2,3,4,4,5,5,6,6,7] print(list(set(list2))) 2 1 list2 = [1,2,3,4,4,5,5,6,6,7] 2 print(list(set(list2)))
def f(): global x x = 1 f() print(x) 6 1 def f(): 2 ? ?global x 3 ? ?x = 1 4 5 f() 6 print(x)
日志存儲,異常記錄等 1 1 日志存儲,異常記錄等
棧:先進后出,后進先出 用列表來實現: class MyStack(): def __init__(self): self.stack = [] def push(self, item): return self.stack.append(item) def pop(self): return self.stack.pop() def is_empty(self): return False if self.stack else True def size(self): return len(self.stack) def clear(self): self.stack.clear() 22 1 棧:先進后出,后進先出 2 用列表來實現: 3 4 class MyStack(): 5 ? ?def __init__(self): 6 ? ? ? ?self.stack = [] 7 8 ? ?def push(self, item): 9 ? ? ? ?return self.stack.append(item) 10 11 ? ?def pop(self): 12 ? ? ? ?return self.stack.pop() 13 14 ? ?def is_empty(self): 15 ? ? ? ?return False if self.stack else True 16 17 ? ?def size(self): 18 ? ? ? ?return len(self.stack) 19 20 ? ?def clear(self): 21 ? ? ? ?self.stack.clear() 22
{}.format() %s %d &f 1 1 {}.format() ? %s %d &f
def BinarySearch(seq, num): if not len(seq): print('list is none') if len(seq) == 1: if seq[0] == num: print('find:{}'.format(num)) else: print('{} not exist'.format(num)) return middle = len(seq) // 2 if seq[middle - 1] == num: print("find:{}".format(num)) elif seq[middle] < num: BinarySearch(seq[middle::], num) else: BinarySearch(seq[0:middle], num) 16 1 def BinarySearch(seq, num): 2 ? ?if not len(seq): 3 ? ? ? ?print('list is none') 4 ? ?if len(seq) == 1: 5 ? ? ? ?if seq[0] == num: 6 ? ? ? ? ? ?print('find:{}'.format(num)) 7 ? ? ? ?else: 8 ? ? ? ? ? ?print('{} not exist'.format(num)) 9 ? ? ? ? ? ?return 10 ? ?middle = len(seq) // 2 11 ? ?if seq[middle - 1] == num: 12 ? ? ? ?print("find:{}".format(num)) 13 ? ?elif seq[middle] < num: 14 ? ? ? ?BinarySearch(seq[middle::], num) 15 ? ?else: 16 ? ? ? ?BinarySearch(seq[0:middle], num)
閉包是由函數及其相關的引用環境組合而成的實體(即:閉包=函數+引用環境) 閉包可以根據外部作用域的局部變量來得到不同的結果,這有點像一種類似配置功能的作用,我們可以修改外部的變量,閉包根據這個變量展現出不同的功能。比如有時我們需要對某些文件的特殊行進行分析,先要提取出這些特殊行 2 1 閉包是由函數及其相關的引用環境組合而成的實體(即:閉包=函數+引用環境) 2 閉包可以根據外部作用域的局部變量來得到不同的結果,這有點像一種類似配置功能的作用,我們可以修改外部的變量,閉包根據這個變量展現出不同的功能。比如有時我們需要對某些文件的特殊行進行分析,先要提取出這些特殊行
os模塊負責程序與操作系統的交互,提供了訪問操作系統底層的接口; sys模塊負責程序與python解釋器的交互,提供了一系列的函數和變量,用于操控python的運行時環境。 2 1 os模塊負責程序與操作系統的交互,提供了訪問操作系統底層的接口; 2 sys模塊負責程序與python解釋器的交互,提供了一系列的函數和變量,用于操控python的運行時環境。
random模塊 1 1 random模塊
os.remove('path/filename') # 刪除文件 1 1 os.remove('path/filename') # 刪除文件
面向對象編程是種具有對象概念的程序編程范型,同時也是一種程序開發的抽象方針。它可能包含數據、屬性、代碼與方法。對象則指的是類的實例。它將對象作為程序的基本單元,將程序和數據封裝其中,以提高軟件的可重用性、靈活性和可擴展性,對象里的程序可以訪問及修改對象相關聯的數據。在面向對象編程里,計算機程序會被設計成彼此相關的對象。 1 1 面向對象編程是種具有對象概念的程序編程范型,同時也是一種程序開發的抽象方針。它可能包含數據、屬性、代碼與方法。對象則指的是類的實例。它將對象作為程序的基本單元,將程序和數據封裝其中,以提高軟件的可重用性、靈活性和可擴展性,對象里的程序可以訪問及修改對象相關聯的數據。在面向對象編程里,計算機程序會被設計成彼此相關的對象。
繼承更多了是為了多態,也可提升代碼的復用程度。 特點: 在繼承中基類的構造(init()方法)不會被自動調用,它需要在其派生類的構造中親自專門調用; Python總是首先查找對應類型的方法,如果它不能在派生類中找到對應的方法,它才開始到基類中逐個查找。(先在本類中查找調用的方法,找不到才去基類中找); 4 1 繼承更多了是為了多態,也可提升代碼的復用程度。 2 特點: 3 在繼承中基類的構造(init()方法)不會被自動調用,它需要在其派生類的構造中親自專門調用; 4 Python總是首先查找對應類型的方法,如果它不能在派生類中找到對應的方法,它才開始到基類中逐個查找。(先在本類中查找調用的方法,找不到才去基類中找);
當出現多重繼承并產生菱形交叉時查找屬性或方法路徑順序。 python2中多繼承是深度優先,python3找那個多繼承是廣度優先 2 1 當出現多重繼承并產生菱形交叉時查找屬性或方法路徑順序。 2 python2中多繼承是深度優先,python3找那個多繼承是廣度優先
super() 函數是用于調用父類(超類)的一個方法。 super 是用來解決多重繼承問題的,直接用類名調用父類方法在使用單繼承的時候沒問題,但是如果使用多繼承,會涉及到查找順序(MRO)、重復調用(鉆石繼承)等種種問題。 MRO 就是類的方法解析順序表, 其實也就是繼承父類方法時的順序表。 Python3.x 和 Python2.x 的一個區別是: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx 4 1 super() 函數是用于調用父類(超類)的一個方法。 2 super 是用來解決多重繼承問題的,直接用類名調用父類方法在使用單繼承的時候沒問題,但是如果使用多繼承,會涉及到查找順序(MRO)、重復調用(鉆石繼承)等種種問題。 3 MRO 就是類的方法解析順序表, 其實也就是繼承父類方法時的順序表。 4 Python3.x 和 Python2.x 的一個區別是: Python 3 可以使用直接使用 super().xxx 代替 super(Class, self).xxx
functools模塊用于高級函數:作用于或返回其他函數的函數,一般來說,任何可調用對象都可以作為這個模塊的用途來處理。 1 1 functools模塊用于高級函數:作用于或返回其他函數的函數,一般來說,任何可調用對象都可以作為這個模塊的用途來處理。
__init__ 構造方法,當類被實例化的時候執行 __new__ 工廠函數,在類被實例前執行 __del__ 析構方法,當一個對象沒有任何引用時執行,用于銷毀對象 __call__ 允許一個類的實例像函數一樣被調用 4 1 __init__ 構造方法,當類被實例化的時候執行 2 __new__ 工廠函數,在類被實例前執行 3 __del__ 析構方法,當一個對象沒有任何引用時執行,用于銷毀對象 4 __call__ 允許一個類的實例像函數一樣被調用
區分是否有對象來帶調用,有就是方法,沒有就是函數 1 1 區分是否有對象來帶調用,有就是方法,沒有就是函數
在使用靜態方法時,類中的self將不會再進行傳值,此時,靜態方法已經和類沒什么關系了。 用@staticmethod 聲明 類方法只能訪問類變量,不能訪問實例變量。 都能被實例和類調用 3 1 在使用靜態方法時,類中的self將不會再進行傳值,此時,靜態方法已經和類沒什么關系了。 ? 用@staticmethod 聲明 2 類方法只能訪問類變量,不能訪問實例變量。 3 都能被實例和類調用
構造方法 1 1 構造方法
count = 0 for i in range(1, 6): for j in range(1, 6): for k in range(1, 6): if i != j and i != j and j != k: print('{}{}{}'.format(i, j, k)) count += 1 print(count) 8 1 count = 0 2 for i in range(1, 6): 3 ? ?for j in range(1, 6): 4 ? ? ? ?for k in range(1, 6): 5 ? ? ? ? ? ?if i != j and i != j and j != k: 6 ? ? ? ? ? ? ? ?print('{}{}{}'.format(i, j, k)) 7 ? ? ? ? ? ? ? ?count += 1 8 print(count)
getattr() 它接收2個參數,前面的是一個對象或者模塊,后面的是一個字符串,注意了!是個字符串 例子,用戶輸入儲存在inp中,這個inp就是個字符串,getattr函數讓程序去commons這個模塊里,尋找一個叫inp的成員(是叫,不是等于),這個過程就相當于我們把一個字符串變成一個函數名的過程。然后,把獲得的結果賦值給func這個變量,實際上func就指向了commons里的某個函數。最后通過調用func函數,實現對commons里函數的調用。這完全就是一個動態訪問的過程,一切都不寫死,全部根據用戶輸入來變化。 3 1 getattr() 2 它接收2個參數,前面的是一個對象或者模塊,后面的是一個字符串,注意了!是個字符串 3 例子,用戶輸入儲存在inp中,這個inp就是個字符串,getattr函數讓程序去commons這個模塊里,尋找一個叫inp的成員(是叫,不是等于),這個過程就相當于我們把一個字符串變成一個函數名的過程。然后,把獲得的結果賦值給func這個變量,實際上func就指向了commons里的某個函數。最后通過調用func函數,實現對commons里函數的調用。這完全就是一個動態訪問的過程,一切都不寫死,全部根據用戶輸入來變化。
元類就是創建類對象 Django ORM 1 1 元類就是創建類對象 ? Django ORM
#1. 裝飾器實現 def Singleton(cls): _instance = {} def wrapper(*args, **kwargs): if cls not in _instance: _instance[cls] = cls(*args, **kwargs) return _instance[cls] return wrapper @Singleton class A(object): def __init__(self, a): self.a = a print self.a #2. 重新__new__方法 (有坑,__init__會執行多次) import threading class B(object): lock = threading.Lock() _instance = None def __init__(self): self.b = {} def __new__(cls, *args, **kwargs): if not B._instance: with B.lock: if not B._instance: B._instance = object.__new__(cls) return B._instance #3. 元類實現 class SingletonType(type): def __init__(self, *args, **kwargs): super(SingletonType, self).__init__(*args, **kwargs) def __call__(cls, *args, **kwargs): # 這里的cls,即Foo類 print('cls', cls) obj = cls.__new__(cls, *args, **kwargs) cls.__init__(obj, *args, **kwargs) # Foo.__init__(obj) return obj metaclass = SingletonType class Foo(): # 指定創建Foo的type為SingletonType def __init__(self, name): self.name = name def __new__(cls, *args, **kwargs): return object.__new__(cls) #4.模塊實現 a.py class A(object): def __init__(self, a): self.a = a print self.a objA = A('aaa') print(id(objA)) b.py from a import objA print(id(objA)) 70 1 #1. 裝飾器實現 2 def Singleton(cls): 3 ? ?_instance = {} 4 5 ? ?def wrapper(*args, **kwargs): 6 ? ? ? ?if cls not in _instance: 7 ? ? ? ? ? ?_instance[cls] = cls(*args, **kwargs) 8 ? ? ? ?return _instance[cls] 9 10 ? ?return wrapper 11 12 13 class A(object): 14 ? ?def __init__(self, a): 15 ? ? ? ?self.a = a 16 ? ? ? ?print self.a 17 18 19 20 #2. 重新__new__方法 ? (有坑,__init__會執行多次) 21 import threading 22 class B(object): 23 ? ?lock = threading.Lock() 24 ? ?_instance = None 25 26 ? ?def __init__(self): 27 ? ? ? ?self.b = {} 28 29 ? ?def __new__(cls, *args, **kwargs): 30 ? ? ? ?if not B._instance: 31 ? ? ? ? ? ?with B.lock: 32 ? ? ? ? ? ? ? ?if not B._instance: 33 ? ? ? ? ? ? ? ? ? ?B._instance = object.__new__(cls) 34 ? ? ? ?return B._instance 35 36 #3. 元類實現 37 class SingletonType(type): 38 ? ?def __init__(self, *args, **kwargs): 39 ? ? ? ?super(SingletonType, self).__init__(*args, **kwargs) 40 41 ? ?def __call__(cls, *args, **kwargs): ?# 這里的cls,即Foo類 42 ? ? ? ?print('cls', cls) 43 ? ? ? ?obj = cls.__new__(cls, *args, **kwargs) 44 ? ? ? ?cls.__init__(obj, *args, **kwargs) ?# Foo.__init__(obj) 45 ? ? ? ?return obj 46 47 48 metaclass = SingletonType 49 50 51 class Foo(): ?# 指定創建Foo的type為SingletonType 52 ? ?def __init__(self, name): 53 ? ? ? ?self.name = name 54 55 ? ?def __new__(cls, *args, **kwargs): 56 ? ? ? ?return object.__new__(cls) 57 58 59 #4.模塊實現 60 a.py 61 class A(object): 62 ? ?def __init__(self, a): 63 ? ? ? ?self.a = a 64 ? ? ? ?print self.a 65 objA = A('aaa') 66 print(id(objA)) 67 68 b.py 69 from a import objA 70 print(id(objA))
#閉包的形式,接受一個函數,返回內部函數,內湖函數中有對接受的函數的處理。裝飾器可以在不影響原函數的情況下拓展自定義功能,提代碼的復用性。 def output_current_time(func): def warpper(*args,**kargs): import datetime now_time = datetime.datetime.now() print(now_time) res = func() return res return warpper @output_current_time def task(): print('do task') 13 1 #閉包的形式,接受一個函數,返回內部函數,內湖函數中有對接受的函數的處理。裝飾器可以在不影響原函數的情況下拓展自定義功能,提代碼的復用性。 2 def output_current_time(func): 3 ? ?def warpper(*args,**kargs): 4 ? ? ? ?import datetime 5 ? ? ? ?now_time = datetime.datetime.now() 6 ? ? ? ?print(now_time) 7 ? ? ? ?res = func() 8 ? ? ? ?return res 9 ? ?return warpper 10 11 12 def task(): 13 ? ?print('do task')
try: 可能出現異常的代碼塊 except Exception as es: 出現的異常的處理方式 主動拋出異常:raise 6 1 try: 2 ? ?可能出現異常的代碼塊 3 except Exception as es: 4 ? ?出現的異常的處理方式 5 6 主動拋出異常:raise
python中至少有三種不同的MRO: 經典類(calssic class),深度優先遍歷 在python2.2中提出了type和class的統一,出現了一個內建類型以及自定義類的公共祖先object,即新式類(new-style class)預計算 python2.3之后新式類的C3算法,這是python3唯一支持的方式 5 1 python中至少有三種不同的MRO: 2 3 經典類(calssic class),深度優先遍歷 4 在python2.2中提出了type和class的統一,出現了一個內建類型以及自定義類的公共祖先object,即新式類(new-style class)預計算 5 python2.3之后新式類的C3算法,這是python3唯一支持的方式
isinstance用于類型判斷: 接受兩個參數:第一個為:object對象,第二個為類型類型 比如,要判斷3是不是int類型: isinstance(3,int) 如果時返回True,否則返回False 5 1 isinstance用于類型判斷: 2 接受兩個參數:第一個為:object對象,第二個為類型類型 3 比如,要判斷3是不是int類型: 4 isinstance(3,int) 5 如果時返回True,否則返回False
給定一個整數數和一個目標值,找出數組中和為目標值的兩個數, 你可以假設每個輸入只對應一種答案,且元素不能被重復利用 # 例子: #nums = [2,7,11,15],target=9 #因為nums[0]+nums[1]=2+7=9 #所以返回[0,1] # code: list1 = [1, 4, 6, 8, 9] target_num = 15 def twoSum(listobj, target_num): d = {} # 用來存放元素與下標的對應關系 for i, v in enumerate(listobj): if target_num - v in d: return [d[target_num - v], i] d[v] = i print(twoSum(list1, target_num)) 18 1 # 例子: 2 #nums = [2,7,11,15],target=9 3 #因為nums[0]+nums[1]=2+7=9 4 #所以返回[0,1] 5 6 # code: 7 8 list1 = [1, 4, 6, 8, 9] 9 target_num = 15 10 11 def twoSum(listobj, target_num): 12 ? ?d = {}# 用來存放元素與下標的對應關系 13 ? ?for i, v in enumerate(listobj): 14 ? ? ? ?if target_num - v in d: 15 ? ? ? ? ? ?return [d[target_num - v], i] 16 ? ? ? ?d[v] = i 17 ? ? ? ? 18 print(twoSum(list1, target_num))
# 可以處理 : list,dict,int,str,float,object # 支持datetime? #關鍵在于重寫JSONEncoder的default方法 import json from json import JSONEncoder from datetime import datetime class ComplexEncoder(JSONEncoder): def default(self, obj): if isinstance(obj, datetime): # 如果obj是datatime類型 就將obj格式化為字符串 return obj.strftime('%Y-%m-%d %H:%M:%S') else: # 否則交給父類的delault處理 return super(ComplexEncoder, self).default(obj) d = {'name': 'alex', 'data': datetime.now()} print(json.dumps(d, cls=ComplexEncoder)) 19 1 # 可以處理 : list,dict,int,str,float,object 2 3 # 支持datetime? 4 #關鍵在于重寫JSONEncoder的default方法 5 ? 6 import json 7 from json import JSONEncoder 8 from datetime import datetime 9 10 11 class ComplexEncoder(JSONEncoder): 12 ? ?def default(self, obj): 13 ? ? ? ?if isinstance(obj, datetime): ? # 如果obj是datatime類型 就將obj格式化為字符串 14 ? ? ? ? ? ?return obj.strftime('%Y-%m-%d %H:%M:%S') 15 ? ? ? ?else: # 否則交給父類的delault處理 16 ? ? ? ? ? ?return super(ComplexEncoder, self).default(obj) 17 ? ? ? ? 18 d = {'name': 'alex', 'data': datetime.now()} 19 print(json.dumps(d, cls=ComplexEncoder))
# 這是因為json.dumps 序列化時對中文默認使用的ascii編碼 jsonData = json.dumps({'name': '小明同學'}, ensure_ascii=False) print(jsonData) 3 1 # 這是因為json.dumps 序列化時對中文默認使用的ascii編碼 2 jsonData = json.dumps({'name': '小明同學'}, ensure_ascii=False) 3 print(jsonData)
# Python的assert是用來檢查一個條件,如果它為真,就不做任何事。如果它為假,則會拋出AssertError并且包含錯誤信息。例如: x = 23 assert x > 0, "x is not zero or negative" assert x%2 == 0, "x is not an even number" #場景: """ ☆防御型的編程 ☆運行時檢查程序邏輯 ☆檢查約定 ☆程序常量 ☆檢查文檔 """ # 在unittest中很常用 x 1 # Python的assert是用來檢查一個條件,如果它為真,就不做任何事。如果它為假,則會拋出AssertError并且包含錯誤信息。例如: 2 x = 23 3 assert x > 0, "x is not zero or negative" 4 assert x%2 == 0, "x is not an even number" 5 6 #場景: 7 """ 8 ☆防御型的編程 9 ☆運行時檢查程序邏輯 10 ☆檢查約定 11 ☆程序常量 12 ☆檢查文檔 13 """ 14 # 在unittest中很常用
https://www.cnblogs.com/gqtcgq/p/8126124.html # 這篇博客講的很好 1 https://www.cnblogs.com/gqtcgq/p/8126124.html ? # 這篇博客講的很好
轉載于:https://www.cnblogs.com/wangbaojun/p/11000391.html
總結
以上是生活随笔為你收集整理的知识点总结(基础篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么叫刺身 揭秘日本刺身的由来和制作方
- 下一篇: 炒生菜的家常做法?