日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 模块初始化的时候,发生了什么?

發布時間:2025/3/20 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 模块初始化的时候,发生了什么? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

假設有一個 hello.py 的模塊,當我們從別的模塊調用 hello.py 的時候,會發生什么呢?

方便起見,我們之間在 hello.py 的目錄下使用 ipython 導入了。

hello.py 的代碼如下,分別有模塊變量,函數,類變量,類的靜態方法、類方法和實例方法。

# hello.py print 'module value' module_a = 233def f():print 'func name:', f.__name__class DoClass(object):print 'do class'c_value = 88@classmethoddef cf(cls):print 'cf', cls.cf@staticmethoddef sf():print 'sf', DoClass.sf.func_namedef f(self):print self.f

在 hello.py 的目錄下,開啟 ipython,查看結果。

In [1]: import sysIn [2]: sys.modules['hello'] --------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-2-ec73143594c2> in <module>() ----> 1 sys.modules['hello']KeyError: 'hello'

在還沒有導入 hello 模塊的時候,可以看到,此時系統中是沒有這個模塊的,讓我們進行一次導入。

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' In [3]: import hello module value do classIn [4]: sys.modules['hello'] Out[4]: <module 'hello' from 'hello.pyc'>

導入后,可以看到模塊中的模塊變量和類變量都直接執行了,并且可以看到此時系統中是有了 hello 這個模塊了。此時可以看一下 hello 模塊的屬性:

In [5]: dir(hello) Out[5]: ['DoClass','__builtins__','__doc__','__file__','__name__','__package__','f','module_a']

可以看到,模塊有模塊變量、函數以及類三個屬性。此時,在 ipython 中再次導入 hello,查看結果:

In [6]: import helloIn [7]:

發現此時什么都沒有輸出,這是因為模塊只有第一次被導入的時候才會被執行。其實,可以把導入模塊作為生成一個新的對象,模塊變量和類變量都是在模塊對象初始化的時候執行的,而函數和類的方法,則不會初始化的時候執行,只有在調用的時候才會執行:

In [7]: hello.f() func name: fIn [8]: hello.module_a Out[8]: 233In [9]: hello.DoClass Out[9]: hello.DoClassIn [10]: hello.DoClass.c_value Out[10]: 88

那么,如果在你模塊中導入了其他的模塊,或者導入了其他模塊的方法,又是怎樣的呢?

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' # hello.py # -*- coding: utf-8 -*- import math from math import sqrt

在模塊中導入 math 以及 math 的 sqrt 方法,然后導入 hello:

In [1]: import helloIn [2]: dir(hello) Out[2]: ['__builtins__','__doc__','__file__','__name__','__package__','math','sqrt']In [3]: hello.math Out[3]: <module 'math' from '/usr/local/Cellar/python/2.7.14_1/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/math.so'>In [4]: hello.math.sqrt(100) Out[4]: 10.0In [5]: hello.sqrt(1000) Out[5]: 31.622776601683793

可以看到,導入 hello 后,在 hello 中導入的 math 以及 sqrt 都成了 hello 的方法,這和我們直接在模塊中定義的變量是一致的。

總結:不管在模塊中導入其他的模塊或者直接定義變量,函數以及類,擋在別的模塊中導入該模塊的時候,這些內容都將成為該模塊的屬性。這其實和 Python 中一切皆對象是保持一致的。

總結

以上是生活随笔為你收集整理的Python 模块初始化的时候,发生了什么?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。