Python 的模組匯入原理

2021-09-05 18:13:33 字數 976 閱讀 8360

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

django.models.blog

import

entries

這裡 from 後面顯示的並非實際模組定義的路徑,而是動態產生。django 讀取你定義的模組,把它重新放到 django.models.blog 下面。

該技術的實質原理,涉及兩點:

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將乙個模組中包含的變數匯入到當前模組的作用域內,共...