国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中模塊與包有相同名字的處理方法

2020-02-16 01:30:25
字體:
來源:轉載
供稿:網友

前言

在編程開發中,個人覺得,只要按照規范去做,很少會出問題。剛開始學習一門技術時,的確會遇到很多的坑。踩的坑多了,這是好事,會學到更多東西,也會越來越覺得按照規范做的重要性,規范的制定就是用來規避問題的。有時候確實應該聽聽有經驗人的建議,不要一意孤行。這好像不是本文的重點,其實我重點是想表達,盡量按規范做事,這樣會少走很多彎路。

我現在使用的主力編程語言是 Python,在接觸 Python 至今,我感覺我踩的坑還是極少的,基本上沒有遇到什么奇怪的問題。實際上,這并不是一件好事,不踩坑,很多躺在暗處的知識點你不會了解,所以也很難成長。幸好,有一些會踩坑的同事。

一同事問我,在 Python 中,如果一個模塊和一個包同名時,是不是只能導入包,如果要導入模塊該怎么辦。他的意思大概是這樣的,在項目的同一級目錄下,有一個 foo.py 文件和一個 foo/ 目錄,如果 import foo 會導入 foo/ 的內容而不是 foo.py 的內容。

被問到這個問題時,我首先感覺到的是詫異,這明顯是存在歧義的。如果是我,肯定不會把模塊名和包名設計成一樣的名字,因為本質上來說在導入的時候沒法區分到底要導入誰。除非系統有特別的規定,例如,規定這種情況只能導入包。

我的潛意識里認為這里應該報錯,Python 解釋器不知道要導入誰。但是,同事告訴我,別人的代碼是這么寫的,而且在這種情況下會默認導入包。那就是可以的咯,而且解釋器已經規定這種情況會總是導入包。

為了驗證下這一點,我寫了個簡單的項目,項目結構如下:

.├── main.py└── same ├── api │ └── __init__.py ├── auth │ └── __init__.py ├── auth.py └── __init__.py

其中:

same/api/__init__/py 的內容:

from .. import auth

same/auth/__init__.py 的內容:

auth_str = "This is str in package!"

same/auth.py 的內容:

auth_str = "This is str in module!"

main.py 的內容:

from __future__ import print_functionfrom same.api import auth# Script starts from hereif __name__ == "__main__": print(auth.auth_str)

稍微有些復雜,哈哈,主要是同事那兒大致的結構是這樣的,這里是為更好的模擬下。我在 same.auth 包中定義了一個 auth_str 字符串,又在同名的 same.auth 模塊中定義了一個同名的 auth_str 字符串,然后在 same.api 包嘗試導入 auth,最后在 main.py 嘗試輸出 same.api.auth.auth_str,看看到底哪個字符串會被打印。同時嘗試用 Python2 和 Python3 執行 main.py,得到的結果都是:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 手游| 新源县| 青浦区| 通许县| 天镇县| 黄冈市| 溆浦县| 嘉祥县| 安远县| 三台县| 济南市| 东光县| 黄石市| 崇左市| 赫章县| 郑州市| 平阳县| 江口县| 大田县| 吴旗县| 宁蒗| 八宿县| 扎兰屯市| 嘉祥县| 牙克石市| 措勤县| 铁岭县| 平南县| 石台县| 武强县| 乐亭县| 班玛县| SHOW| 南华县| 宁波市| 天峨县| 武鸣县| 垫江县| 上犹县| 云浮市| 镇沅|