Python最難理解的概念之一,猴子補丁?是什麼?

--

一、什麼是猴子補丁?

猴子補丁:Monkey Patch,主要功能就是動態的屬性的替換,模塊運行時替換的功能。說直接點就是程序功能的追加或者變更。

二、Monkey Patch功能簡介

Monkey Patch允許在程序運行期間動態的修改一個類或者模塊。

三、例子

之前一個做遊戲的,在很多地方都用了**import json,後來發現ujson比Python自帶的json快很多,於是問題來了,幾十幾百個文件難道要一個一個的把import json替換成import ujson as json嗎?那也太痛苦了,其實只需要在進程開始的地方使用monkey patch**就行了,它是會影響整個進程空間的,同一進程空間中一個module只會被執行一次。

"""
file:json_serialize.py
"""
import time
import json

# 时间测试装饰器
def run_time(func):
def inner(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f'程序用时:{end_time - start_time}')
return result

return inner

@run_time
def json_dumps(obj):
return json.dumps(obj)

# 生成测试字典
test_dict = {i: 1 for i in range(1, 10000001)}

使用json模塊執行原程序:

"""
file:run.py
"""
from json_serialize import json_dumps, test_dict

print(f'json.dumps编码用时:', end='')
r1 = json_dumps(test_dict)

原程序的性能太低,我們可以使用ujson將json替換掉!
使用monkey patch修改後:

"""
file:run.py
"""
import json
import ujson
from json_serialize import json_dumps, test_dict

def monkey_patch_json():
json.dumps = ujson.dumps

monkey_patch_json()
print(f'使用猴子补丁之后json.dumps编码用时:', end='')
json_dumps(test_dict)

這個時候在這個項目中json模塊就被monkey patch修改爲了ujson模塊。

文章來源:菜鸟学Python
原文鏈接:https://mp.weixin.qq.com/s/gm7KnqjnTvoO5yk7JnGWVA

※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※

我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。各位也可以關注我的Facebook,按讚我的臉書並私訊「10」,送你十週入門數據分析電子書唷!期待你與我互動起來~

文章推薦

餅圖變形記,肝了3000字,收藏就是學會!

MySQL必須掌握4種語言!

太實用了!4種方法教你輕鬆製作互動式儀表板!

跟資料打交道的人都得會的這8種資料模型,滿足工作中95%的需求

妙呀!一行Python程式碼

回顧十週入門數據分析系列文:

關注數據君的臉書:

我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。按贊我的臉書,會有豐富資料包贈送唷!

--

--

數據分析那些事
數據分析那些事

Written by 數據分析那些事

這是一個專注於數據分析職場的內容部落格,聚焦一批數據分析愛好者,在這裡,我會分享數據分析相關知識點推送、(工具/書籍)等推薦、職場心得、熱點資訊剖析以及資源大盤點,希望同樣熱愛數據的我們一同進步! 臉書會有更多互動喔:https://www.facebook.com/shujvfenxi/

No responses yet