james bennett 在他的 blog(
b-list) 上最近發表了兩篇文章(
1, 2),談到了 python 中的一些 'magic'. 其中提到所謂的『克拉克第三定律』:
any sufficiently advanced technology is indistinguishable from magic.
(任何足夠高階的技術都近乎魔術)
django 在 0.95 版本之前,就包含了不少魔術,然而這被認為是「違法直覺的」,而在後續的版本中被去除了。可見,python 中的好的設計還是傾向於簡單,遵循直覺。不過,研究這些手段,有助於我們更深入的理解 python 的某些高階特性,從而更好的掌控這個語言。
其中,文中提到的例子講述了模組匯入的原理,以及如何利用這個原理實現魔術一樣的效果:
比如自己定義乙個模組,然後在 django 框架中,可以從 django 的包中匯入它:
>>> from這裡 from 後面顯示的並非實際模組定義的路徑,而是動態產生。django 讀取你定義的模組,把它重新放到 django.models.blog 下面。django.models.blog
import
entries
該技術的實質原理,涉及兩點:
1. python 模組只是普通物件,存在 sys.modules 這個字典中。
因此,可以向字典中自己增加乙個項,用來註冊動態建立的模組物件。然後就可以像普通模組一樣被 import 了。
2.可以動態建立模組物件,利用 types 模組的一些方法實現。這個就類似於 .net 的反射/codedom:
>>> import
types
>>>
hello_mod
=types
.moduletype
('hello'
)下面就可以向 hello_mod 這個動態建立的 module 附加任何屬性或者函式,類等。
python模組匯入原理
今日在自學python,藉此機會,正好重新開始寫博文,既可以鞏固python的知識,也可順便提高一下文筆。言歸正傳,python的模組是python語言中 復用的最高端別,也是系統命名空間的的劃分標準,也是供頂層檔案 就是包含程式主要控制流程的部分 呼叫的工具庫檔案。實現模型其實很簡單,任何乙個py...
python 的模組匯入
模組 就是一些函式和類的集合檔案,它能實現一些相應的功能,可以想象成匯入到python中以增強功能的擴充套件。需要使用特殊的命令import匯入以後才能使用。匯入模組的時候可以使用 import somemodule 按照 module.function 的格式使用函式,需要加模組名 from so...
python模組的匯入
用於指定包中的模組名 如 import pack1.module1 from pack1.module1 import fun1錯誤使用 import pack1.module1.fun1 from pack1 import module1.fun1將乙個模組中包含的變數匯入到當前模組的作用域內,共...