成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

python import 機(jī)制初探

leanxi / 690人閱讀

摘要:引子考慮有如下代碼結(jié)構(gòu)情況其余文件為空。分析情況當(dāng)我們運(yùn)行時(shí),這時(shí)候系統(tǒng)的搜素路徑包括,我們可以通過(guò)在中添加證實(shí)這一點(diǎn)。情況情況其實(shí)和情況很不一樣,情況叫做,也就是包內(nèi)間接引用。顧名思義,這種引用方法只能在包內(nèi)使用。都是,但不一定是。

引子

考慮有如下代碼結(jié)構(gòu)

.
├── cat
│?? ├── __init__.py
│?? ├── cat.py
│?? └── moo.py
└── dog
    ├── __init__.py
    └── dog.py

2 directories, 5 files

情況1:

# ./cat/cat.py
import moo

其余文件為空。如果我們用運(yùn)行命令: python cat/cat.py,則程序正常運(yùn)行;如果運(yùn)行命令;python -m cat.cat,則會(huì)報(bào)錯(cuò);

情況2:

# ./cat/cat.py
from . import moo

則運(yùn)行結(jié)果相反。

其實(shí),我們的問(wèn)題早就有人提出過(guò)了。PEP 395

The fact that most methods of invoking Python code from the command line break when that code is inside a package, and the two that do work are highly sensitive to the current working directory is all thoroughly confusing for a beginner. :如果一段代碼在一個(gè)包內(nèi),那么從命令行使用這段代碼是非常非常容易出錯(cuò)的,只有2種方法可行:

在整個(gè)包的外部,python -c "from module import code

在整個(gè)包的外部,通過(guò)-m參數(shù)執(zhí)行。

如果在包內(nèi)部,即使你的代碼正確,也基本會(huì)出錯(cuò)。

分析

情況1:

當(dāng)我們運(yùn)行python cat/cat.py時(shí),這時(shí)候系統(tǒng)的搜素路徑包括./cat/,我們可以通過(guò)在./cat/cat.py中添加import sys; print(sys.path)證實(shí)這一點(diǎn)。

當(dāng)我們運(yùn)行 python -m cat.cat時(shí),系統(tǒng)的搜索路徑只包括.,也就是當(dāng)前文件夾,我們可以通過(guò)在當(dāng)前文件夾下添加一個(gè)moo.py文件,這樣python -m cat.cat就不會(huì)報(bào)錯(cuò)了??梢?jiàn),這時(shí)的搜索空間,不包括自文件夾。

情況2:

情況2其實(shí)和情況1很不一樣,情況2叫做package relative import,也就是包內(nèi)間接引用。顧名思義,這種引用方法只能在包內(nèi)使用。也就是說(shuō),只能通過(guò)python -m cat.cat, 或者是python -c "from cat import cat" 之類(lèi)的方法來(lái)使用。以下內(nèi)容源自python官方文檔中的 The import statement

When a module or package is contained within another package ... using leading dots in the specified module or package after from you can specify how high to traverse up the current package hierarchy without specifying exact names.

官方文檔中的Package Relative Import 展示了詳細(xì)的用法。

import

python中,載入一個(gè)包有幾種方式:

import語(yǔ)句

importlib模塊提供的方法

內(nèi)置方法__import__ (不提倡)

python中,有module,有package。package都是module, 但module不一定是packagemodule只有一種,package有2種。

代碼重載:importlib.reload

使用importlib.reload會(huì)重載當(dāng)前代碼。

import os
import importlib

import foo
print("foo.a: {}".format(foo.a))

command = "echo a=2 >> foo.py"

print(command)
os.popen(command)

importlib.reload(foo)
print("foo.a: {}".format(foo.a))

輸出:

foo.a: 2
echo a=2 >> foo.py
foo.a: 2
參考資料

import 語(yǔ)法

PEP 395

PEP 420

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/45222.html

相關(guān)文章

  • 初探python之做一個(gè)簡(jiǎn)單小爬蟲(chóng)

    摘要:準(zhǔn)備工作初探,這個(gè)文章屬于自己的一個(gè)總結(jié)。所以教程面向新手,無(wú)技術(shù)含量。凡是報(bào)錯(cuò)信息看到,就是表示縮進(jìn)不一致。注由于原網(wǎng)址不方便公布,代碼中的網(wǎng)址全部替換為了。 準(zhǔn)備工作 初探python,這個(gè)文章屬于自己的一個(gè)總結(jié)。所以教程面向新手,無(wú)技術(shù)含量。python環(huán)境Linux基本都有,Windows下官網(wǎng)也提供了便利的安裝包,怎么安裝配置網(wǎng)上有很多教程在此就不一一說(shuō)明。我使用的pytho...

    Juven 評(píng)論0 收藏0
  • python socket編程】—— 1.初探

    摘要:從導(dǎo)入相應(yīng)函數(shù),即傳入一個(gè)上一步中的類(lèi),返回對(duì)應(yīng)的網(wǎng)頁(yè)內(nèi)容,具體實(shí)現(xiàn)將在后續(xù)講解。后續(xù)只要去處理解析請(qǐng)求和響應(yīng)部分即可,主程序可以不用再修改。下一篇文章編程解析請(qǐng)求頭 Flask或者其他框架都是封裝的比較完善,我們可以不去關(guān)注路由、SESSION等到底是怎么實(shí)現(xiàn)的,現(xiàn)在我們使用socket來(lái)實(shí)現(xiàn)一個(gè)帶有注冊(cè)、登錄功能的To do網(wǎng)站,這樣能對(duì)后端框架了解的稍微更深入一點(diǎn)(當(dāng)然你也可以直...

    int64 評(píng)論0 收藏0
  • Python Metaclass 初探

    摘要:以我們的程序?yàn)槔褪且詾楫a(chǎn)生了一個(gè)名為的新類(lèi)型,改類(lèi)型的實(shí)現(xiàn)由給出,而就包含了通過(guò)返回的這個(gè)方法。從中找到這些類(lèi)并一一執(zhí)行測(cè)試。 先以一個(gè)大牛的一段關(guān)于Python Metapgramming的著名的話來(lái)做開(kāi)頭: Metaclasses are deeper magic than 99% of users should ever worry about. If you wonder ...

    nidaye 評(píng)論0 收藏0
  • python 做數(shù)據(jù)分析:pandas 的 excel 應(yīng)用初探

    摘要:今天要分享的是,用來(lái)寫(xiě)。數(shù)據(jù)處理環(huán)節(jié)效率低下,易受干擾。問(wèn)題排查難以溯源。一旦數(shù)據(jù)報(bào)告有誤,想要定位問(wèn)題所在,常常需要從頭開(kāi)始復(fù)盤(pán)。結(jié)果和上面結(jié)果結(jié)構(gòu)是一致的。這是官網(wǎng)的文檔,但是卻不完全適用目前的場(chǎng)景。 大毛 豈安科技業(yè)務(wù)風(fēng)險(xiǎn)分析師 多年訂單業(yè)務(wù)反欺詐經(jīng)驗(yàn),負(fù)責(zé)豈安科技多款產(chǎn)品運(yùn)營(yíng)工作。 上回筆者分享過(guò)一些 pandas 的常用數(shù)據(jù)查詢(xún)語(yǔ)法,但是數(shù)據(jù)查詢(xún)對(duì)于 pandas 而言只是冰...

    aervon 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<