什麼是物件導向程式設計?
object oriented programming(oop)
把物件作為基本單元,把物件抽象成類(class),包含成員和方法
資料封裝、繼承、多型
python中使用類來實現。過程式程式設計(函式),oop(類)
類變數和例項變數的區別
區分類變數和例項變數
類變數由所有例項共享
例項變數由例項單獨享有,不同例項之間不影響
當我們需要在乙個類的不同例項之間共享變數的時候使用類變數
classmethod/staticmethod區別
classmethod vs staticmethod
都可以通過class.method()的方式使用
classmethod第乙個引數是cls,可以引用類變數
staticmethod使用起來和普通函式一樣,只不過放在類裡去組織
什麼是元類?使用場景
元類(meta class)是建立類的類
元類允許我們控制類的生成,比如修改類的屬性等
使用type來定義元類
元類最常見的乙個使用場景就是orm框架
什麼是裝飾器
decorator
python中一切皆物件,函式也可以當做引數傳遞
裝飾器是接受函式作為引數,新增功能後返回乙個新函式的函式(類)
python中通過@使用裝飾器
import time
deflog_time
(func)
:def
_log
(*args,
**kargs)
: beg = time.time(
) res = func(
*args,
**kargs)
print
('use time:{}'
.format
(time.time(
)- beg)
)return res
return _log
@log_time # @裝飾器語法糖
defmysleep()
: time.sleep(1)
if __name__ ==
'__main__'
: mysleep(
)# 去除@log_time
# newsleep = log_time(mysleep)
# newsleep()
import time
class
logtime()
:def
__call__
(self, func)
:def
_log
(*args,
**kargs)
: beg = time.time(
) res = func(
*args,
**kargs)
print
('use time:{}'
.format
(time.time(
)- beg)
)return res
return _log
@logtime(
)def
mysleep()
: time.sleep(1)
if __name__ ==
'__main__'
: mysleep(
)
import time
class
logtime()
:def
__init__
(self, use_int=
false):
self.use_int = use_int
def__call__
(self, func)
:def
_log
(*args,
**kargs)
: beg = time.time(
) res = func(
*args,
**kargs)
if self.use_int:
print
('use time:{}'
.format
(int
(time.time(
)- beg)))
else
:print
('use time:{}'
.format
(time.time(
)- beg)
)return res
return _log
@logtime(use_int=
true
)def
mysleep()
: time.sleep(1)
if __name__ ==
'__main__'
: mysleep(
)
設計模式
檢視設計模式總結文章
函式式程式設計
python支援部分函式式程式設計特性
把電腦的運算視作數學上的函式計算(lambda演算)
高階函式: map/reduce/filter
無***,相同的引數呼叫始終產生同樣的結果
什麼是閉包?
closure
繫結了外部作用域的變數的函式
即使程式離開外部作用域,如果閉包仍然可見,繫結變數不會銷毀
每次執行外部函式都會重新建立閉包
閉包:引用了外部自由變數的函式
自由變數:不在當前函式定義的變數
特性:自由變數會和閉包函式同時存在
from functools import wraps
defcache
(func)
: store =
@wraps(func)
def_
(n):
if n in store:
print
(store[n]
)return store[n]
else
: res = func(n)
store[n]
= res
return res
return _
@cache
deff
(n):
# 斐波那契數列
if n ==0:
return
0if n ==1:
return
1return f(n -1)
+ f(n -2)
if __name__ ==
'__main__'
:print
(f(7
))
程式設計正規化21
double all 123 4 246 8 incr all 123 4 234 5 define double x x2 define incr x 1 map double 1 2 3 4 24 68 eval這個過程的用法,利用它可以實現用scheme語言本身來解釋scheme表示式的功能,...
程式設計正規化概述
程式設計正規化這個名詞聽起來好像比較高深,但是其實本質上是它是對於程式設計風格,或者設計思路的抽象。它並不是跟程式語言是一一繫結的關係,有些程式語言python 天生可以支援多種程式設計正規化。從程式設計根本思維上的差異上區分,目前主要分成兩種 命令式 指令式 程式設計 和宣告式程式設計 命令式程式...
程式設計正規化 程式設計的本質
程式設計正規化的種類 很多人認同的兩個觀點 程式 資料結構 演算法 這個表示式認為,如果資料結構設計得好,演算法也會變得簡單,而且乙個好的通用的演算法應該可以用在不同的資料結構上。演算法 控制 業務邏輯 這個表示式則想表達的是資料結構不複雜,複雜的是演算法,演算法由兩個邏輯組成,乙個是真正的業務邏輯...