日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
創(chuàng)新互聯(lián)Python教程:pythonpackages是什么意思

package指的就是包,它是一個(gè)有層次的文件目錄結(jié)構(gòu),它定義了由n個(gè)模塊或n個(gè)子包組成的python應(yīng)用程序執(zhí)行環(huán)境。通俗一點(diǎn):包是一個(gè)包含__init__.py 文件的目錄,該目錄下一定得有這個(gè)__init__.py文件和其它模塊或子包。

但是這會(huì)分為兩種情況,第一種情況是一個(gè)空的__init__.py文件,另外一個(gè)情況是寫(xiě)了代碼的__init__.py文件。不管是空的還是有內(nèi)容的,這個(gè)目錄都會(huì)被認(rèn)為是一個(gè)package,這是一個(gè)標(biāo)識(shí)。

相關(guān)推薦:《Python基礎(chǔ)教程》

package的初始化工作

一個(gè)package 被導(dǎo)入,不管在什么時(shí)候__init__.py的代碼都只會(huì)被執(zhí)行一次

>>> import package
hello world
>>> import package
>>> import package

由于 package 被導(dǎo)入時(shí) __init__.py 中的可執(zhí)行代碼會(huì)被執(zhí)行,所以小心在 package 中放置你的代碼,盡可能消除它們產(chǎn)生的副作用,比如把代碼盡可能的進(jìn)行封裝成函數(shù)或類(lèi)。

__init__.py內(nèi)的導(dǎo)入順序

當(dāng)我嘗試導(dǎo)入

from package import something

import語(yǔ)句會(huì)首先檢查something是不是__init__.py的變量,然后檢查是不是subpackage,再檢查是不是module,最后拋出ImportError。

所以檢查順序如下:

(1)__init__.py 文件內(nèi)變量

(2)是不是package內(nèi)的subpackage

(3)是不是package內(nèi)的module

看個(gè)例子

我們有一個(gè)如下結(jié)構(gòu)的package

在a.py文件內(nèi)有一個(gè)函數(shù)

def bar():
    print("Hello, function 'bar' from module 'a' calling")

在b.py文件內(nèi)有一個(gè)函數(shù)

def foo():
    print("Hello, function 'foo' from module 'b' calling")

然后我們添加一個(gè)空的__init__.py 文件在simple_package里面。

我們看下,當(dāng)我們import simple_package的時(shí)候到底會(huì)發(fā)生什么事情(在simple_package內(nèi)激活Python shell或者simple_package的路徑被包含在python的sys.path或者在PYTHONPATH的環(huán)境變量中)

>>> import simple_package
>>> 
>>> simple_package

>>> 
>>> simple_package.a
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'a' is not defined
>>> 
>>> simple_package.b
Traceback (most recent call last):
  File "", line 1, in 
NameError: name 'b' is not defined

我們可以看到simple_package已經(jīng)被成功導(dǎo)入,但是a.py和b.py并沒(méi)有被導(dǎo)入

當(dāng)然了,如果你希望使用import simple_package后自動(dòng)加載a或者b 模塊,這里有兩種辦法。

第一種就是在__init__.py內(nèi)導(dǎo)入a或者b模塊,然后保存再激活python的交互環(huán)境

#__init__.py
import a
import b

當(dāng)你再次嘗試import simple_package后,就可以使用simple_package.a.bar()來(lái)使用模塊a中的bar()函數(shù)了。

第二辦法就是手動(dòng)導(dǎo)入,當(dāng)你想使用模塊a中的bar()函數(shù)時(shí),需要手動(dòng)導(dǎo)入

import simple_package.a as a

然后就是可以a.bar()來(lái)使用bar()函數(shù)了。


網(wǎng)站欄目:創(chuàng)新互聯(lián)Python教程:pythonpackages是什么意思
分享鏈接:http://www.dlmjj.cn/article/dhggicp.html