欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python類(lèi)的動(dòng)態(tài)綁定實(shí)現(xiàn)原理

 更新時(shí)間:2020年03月21日 13:07:29   作者:luoheng  
這篇文章主要介紹了Python類(lèi)的動(dòng)態(tài)綁定實(shí)現(xiàn)原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

使用實(shí)例引用類(lèi)的屬性時(shí),會(huì)發(fā)生動(dòng)態(tài)綁定。即python會(huì)在實(shí)例每次引用類(lèi)屬性時(shí),將對(duì)應(yīng)的類(lèi)屬性綁定到實(shí)例上。

動(dòng)態(tài)綁定的例子:

class A:
  def test1(self):
    print("hello")
  
  def test2(self):
    print("world")

def bound():
  a = A()
  a.test1()
  A.test1 = A.test2
  a.test1()

if __name__ == "__main__":
  bound()

輸出結(jié)果:

hello2 world

從上述代碼中可以看到,類(lèi)方法的變化是實(shí)時(shí)影響實(shí)例對(duì)方法的調(diào)用的,這說(shuō)明python是在實(shí)例調(diào)用方法的過(guò)程中動(dòng)態(tài)地查找類(lèi)方法。

動(dòng)態(tài)綁定的代價(jià):

class A:
  def test(self):
    pass
def one_loop(limited_time):
  a = A()
  for i in range(limited_time):
    a.test()
  f = a.test
  for i in range(limited_time):
    f()

上圖兩個(gè)循環(huán)中,一個(gè)調(diào)用a.test(),不斷進(jìn)行動(dòng)態(tài)綁定,另一個(gè)則先把a(bǔ).test賦值給f,只有一次動(dòng)態(tài)綁定,通過(guò)對(duì)兩個(gè)循環(huán)計(jì)時(shí),測(cè)試動(dòng)態(tài)綁定的代價(jià)。

輸出結(jié)果:

1 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0009999275207519531, 0.008995771408081055, 0.19991111755371094, 1.2715933322906494, 15.831915855407715]
2 [0.0, 0.0, 0.0, 0.0, 0.0, 0.12503726671039295, 0.09472344399590288, 0.1999776288967874, 0.131608969147562, 0.1553209370384522]

折線圖中橫坐標(biāo)為log10(循環(huán)次數(shù)),縱坐標(biāo)為秒數(shù)。

輸出數(shù)據(jù)中,第一行為動(dòng)態(tài)綁定和一次綁定耗費(fèi)時(shí)間的差值,第二行為差值占動(dòng)態(tài)綁定總時(shí)間的比例。

可以看出,在次數(shù)很小的時(shí)候,兩者基本沒(méi)有差距,或者說(shuō)差距忽略不計(jì)。

在10^7次循環(huán),即千萬(wàn)次循環(huán)的時(shí)候,動(dòng)態(tài)綁定與靜態(tài)綁定的耗費(fèi)時(shí)間才出現(xiàn)了明顯差異,當(dāng)循環(huán)次數(shù)達(dá)到十億級(jí)的時(shí)候,耗費(fèi)時(shí)間相差15秒之多,約占總時(shí)間的15%。

由上可知,動(dòng)態(tài)綁定效率低于靜態(tài)綁定,但由于綁定代價(jià)耗時(shí)很少,在次數(shù)很少的時(shí)候基本沒(méi)有影響。

動(dòng)態(tài)綁定的優(yōu)點(diǎn):

class A:
  def test_hello(self):
    print("hello")

def test_world(self):
  print("world")

def main():
  s = A()
  # 提前綁定
  f = s.test_hello
  # 改變方法
  A.test_hello = test_world
  f()
  # 動(dòng)態(tài)綁定
  s.test_hello()

if __name__ == "__main__":
  main()

輸出結(jié)果:

hello2 world

類(lèi)方法的變動(dòng)能夠?qū)崟r(shí)反應(yīng)在動(dòng)態(tài)綁定上,而提前綁定則無(wú)法感知到類(lèi)方法的變動(dòng)。

總結(jié):

1. 一次動(dòng)態(tài)綁定代價(jià)很小,當(dāng)綁定次數(shù)少的時(shí)候基本不影響效率,當(dāng)綁定次數(shù)達(dá)到千萬(wàn)級(jí)時(shí)影響才會(huì)很顯著。

2. 動(dòng)態(tài)綁定實(shí)時(shí)跟蹤類(lèi)方法的變動(dòng),更具靈活性。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python灰度變換中位圖切割分析實(shí)現(xiàn)

    Python灰度變換中位圖切割分析實(shí)現(xiàn)

    灰度變換是指根據(jù)某種目標(biāo)條件按一定變換關(guān)系逐點(diǎn)改變?cè)磮D像中每個(gè)像素灰度值的方法。目的是改善畫(huà)質(zhì),使圖像顯示效果更加清晰。圖像的灰度變換處理是圖像增強(qiáng)處理技術(shù)中的一種非常基礎(chǔ)、直接的空間域圖像處理方法,也是圖像數(shù)字化軟件和圖像顯示軟件的一個(gè)重要組成部分
    2022-10-10
  • Nginx+Uwsgi+Django 項(xiàng)目部署到服務(wù)器的思路詳解

    Nginx+Uwsgi+Django 項(xiàng)目部署到服務(wù)器的思路詳解

    這篇文章主要介紹了Nginx+Uwsgi+Django 項(xiàng)目部署到服務(wù)器的思路,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Sanic框架藍(lán)圖用法實(shí)例分析

    Sanic框架藍(lán)圖用法實(shí)例分析

    這篇文章主要介紹了Sanic框架藍(lán)圖用法,結(jié)合實(shí)例形式分析了Sanic框架中藍(lán)圖的功能以及路由控制中藍(lán)圖的定義、注冊(cè)、簡(jiǎn)單使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • python實(shí)現(xiàn)梯度下降和邏輯回歸

    python實(shí)現(xiàn)梯度下降和邏輯回歸

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)梯度下降和邏輯回歸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Python深度學(xué)習(xí)之Keras模型轉(zhuǎn)換成ONNX模型流程詳解

    Python深度學(xué)習(xí)之Keras模型轉(zhuǎn)換成ONNX模型流程詳解

    這篇文章主要介紹了Python深度學(xué)習(xí)之Keras模型轉(zhuǎn)換成ONNX模型流程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-09-09
  • python中停止線程的方法代碼舉例

    python中停止線程的方法代碼舉例

    在Python中停止線程有多種方法,包括使用全局變量、使用標(biāo)志位、使用異常等,下面這篇文章主要給大家介紹了關(guān)于python中停止線程方法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • Python數(shù)據(jù)類(lèi)型之String字符串實(shí)例詳解

    Python數(shù)據(jù)類(lèi)型之String字符串實(shí)例詳解

    這篇文章主要介紹了Python數(shù)據(jù)類(lèi)型之String字符串,結(jié)合實(shí)例形式詳細(xì)講解了Python字符串的概念、定義、連接、格式化、轉(zhuǎn)換、查找、截取、判斷等常見(jiàn)操作技巧,需要的朋友可以參考下
    2019-05-05
  • python 對(duì)任意數(shù)據(jù)和曲線進(jìn)行擬合并求出函數(shù)表達(dá)式的三種解決方案

    python 對(duì)任意數(shù)據(jù)和曲線進(jìn)行擬合并求出函數(shù)表達(dá)式的三種解決方案

    這篇文章主要介紹了python 對(duì)任意數(shù)據(jù)和曲線進(jìn)行擬合并求出函數(shù)表達(dá)式的三種解決方案,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • python新手經(jīng)常遇到的17個(gè)錯(cuò)誤分析

    python新手經(jīng)常遇到的17個(gè)錯(cuò)誤分析

    這篇文章主要介紹了python新手經(jīng)常遇到的17個(gè)錯(cuò)誤分析,需要的朋友可以參考下
    2014-07-07
  • Numpy截取指定范圍內(nèi)的數(shù)據(jù)方法

    Numpy截取指定范圍內(nèi)的數(shù)據(jù)方法

    今天小編就為大家分享一篇Numpy截取指定范圍內(nèi)的數(shù)據(jù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11

最新評(píng)論