高階函式
import time
def deco(func):
starttime = time.time()
func()
endtime = time.time()
msecs = (endtime-starttime)*100
print("time is %d ms"%msecs)
def func():
print("hello!")
time.sleep()
print("world!")
簡單裝飾器
import time
def deco(func):
starttime = time.time()
func()
endtime = time.time()
msecs = (endtime-starttime)*100
print("time is %d ms"%msecs)
@deco
def func():
print("hello")
time.sleep(1)
print("world")
#呼叫fun(3,4)
其相當於呼叫了deco(func)()其中fun->deco(func)
對帶引數的函式進行裝飾
def deco(func):
starttime = time.time()
func(*args,**kwargs)
endtime = time.time()
msecs = (endtime-starttime)*1000
print("time is %d ms"%msecs)
@deco
def func(a,b):
print("hello")
time.sleep()
print("world")
#呼叫fun(3,4)
其相當於呼叫deco(fun)(3,4)其中fun->deco(fun)
帶引數的裝飾器
def deco(*args,**kargs):
def inner():
starttime = time.time()
func()
endtime = time.time()
msecs = (endtime-starttime)*1000
print("time is %d ms"%msecs)
return inner
@deco("王")
def func():
print("hello")
#呼叫func()
其相當於呼叫 deco(「王」)(func)()其中fun->deco(「wang」)(func)
注:其呼叫原理都相同可以自行解決
外部函式返回內部函式的引用
內部函式使用外部變數
`def outer():
m=1def inner():
n=10
s=m+n
return inner
當outer將會把inner與引用環境打包成乙個整體(整體)反回
d =outer()
d.__closure__[0].cell_contents
可以說閉包是通過__closure__實現的
經典寫法
父類名稱.init(self,引數1,引數2…)即使用非繫結的類方法(用類名來引用的方法),並在引數列表中引入待繫結的物件,從而達到呼叫父類的目的
新式寫法
super(子類,self).init(引數1,引數2…)
call
其用法主要包括如下兩種:1)方法
def fun(m):
print(m)
#正常使用函式
fun(11)
#使用call方法呼叫函式
fun.__call__(11)
2)類
class student:
def __init__(self):
self.name = "wang"
def __call__(self,*args,**kargs):
print("li")
#建立物件
s = student()
#間接呼叫了物件的__call__方法
s()#直接呼叫物件的__call__方法
s.__call__()
綜上當呼叫***()時內部呼叫的其實時***.__call__方法__new__方法
__new__() 方法是在類準備將自身例項化時呼叫__new__()方法始終都是類的靜態方法,即使沒有被加上靜態裝飾器
類的例項化和它的構造方法通常時這個樣子
資料描述符
至少實現了get與set方法的描述符
非資料描述符
沒有set方法的描述符
getattr
當使用者試圖獲取乙個不存在的屬性時的行為
getattribute
定義該類的屬性被訪問時的行為,返回物件時需要使用父類的__getattribute__方法
class foo():
def __init__(self,name):
self.name = name
def __getattribute__(self, item):
print(item)
return object.__getattribute__(self,item)#重點
def __getattr__(self, item):
print(item)
#呼叫f= foo('wang')
print(f.name)
setattr
當乙個屬性被設定時的行為,呼叫時需要通過父類的__setattr__來設定值class foo():
definit(self,name):
self.name = name
def __getattribute__(self, item):
print(item)
return object.__getattribute__(self,item)#重點
def __getattr__(self, item):
print(item)
def __setattr__(self, key, value):
object.__setattr__(self,key,value)#重點
#呼叫f= foo('wang')
print(f.name)
反射機制
可以使用hasattr 、getattr 、setattr等三個函式來實現反射
Python 機器學習基礎
pandas matplotlib reference numpy 的資料結構 numpy的基本操作 當進行 和 等邏輯判斷時,numpy會對array中所有元素進行判斷。import numpy vector numpy.array 5,10,6,7 vector 10 output array ...
python機器學習基礎
可定義為 機器學習是從資料中自動分析獲得的模型,並利用模型對未知資料進行 可分為 監督學習 主要特點是要在訓練模型時提供給學習系統訓練樣本以及樣本隊員的類別標籤,因此又稱為有導師學習。例 學生從老師那裡獲取知識,資訊,老師提供對錯知識 告知最終答案的學習過程。典型的監督學習方法 決策樹,支援向量機 ...
機器學習基礎環境 Python基礎
用途 python應用例項 編碼方式 在python2中使用python3的函式 輸入方式 輸出方式 anaconda資料科學開發環境 版本 anaconda3 5.2.0 py36 windows x86 64 jupyter notebook 修改jupyter的檔案路勁 ipython spy...