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

首頁 > 編程 > Python > 正文

python中import學(xué)習(xí)備忘筆記

2020-02-23 04:19:58
字體:
供稿:網(wǎng)友

前言

在python的模塊有兩種組織方式,一種是單純的python文件,文件名就是模塊名,一種是包,包是一個包含了若干python文件的目錄,目錄下必須有一個文件__init__.py,這樣目錄名字就是模塊名,包里的python文件也可以通過包名.文件名的方式import

import語法

import語法有兩種

1、直接import模塊

 import Module import Module as xx

2、從模塊import對象(下級模塊,類,函數(shù),變量等)

 from Module import Name from Module immport Name as yy

as語法是用來設(shè)置對象(這里用對象泛指模塊,類,函數(shù)等等)別名,import將對象名字引入了當(dāng)前文件的名字空間

假設(shè)有如下目錄結(jié)構(gòu)

├── A.py└── pkg ├── B.py └── __init__.py

在當(dāng)前目錄下,以下語句都是有效的

import A import pkgimport pkg.Bfrom pkg import B

為了簡化討論,下面將不會對as語法進(jìn)行舉例

import步驟

python所有加載的模塊信息都存放在sys.modules結(jié)構(gòu)中,當(dāng)import一個模塊時,會按如下步驟來進(jìn)行

    如果是import A,檢查sys.modules中是否已經(jīng)有A,如果有則不加載,如果沒有則為A創(chuàng)建module對象,并加載A 如果是from A import B,先為A創(chuàng)建module對象,再解析A,從中尋找B并填充到A的__dict__

嵌套import

在import模塊時我們可能會擔(dān)心一個模塊會不會被import多次,假設(shè)有A,B,C三個模塊,A需要import B和C,B又要import C,這樣A會執(zhí)行到兩次import C,一次是自己本身import,一次是在import B時執(zhí)行的import,但根據(jù)上面講到的import步驟,在第二次import時發(fā)現(xiàn)模塊已經(jīng)被加載,所以不會重復(fù)import

但如下情況卻會報錯

#filename: A.pyfrom B import BBclass AA:pass#filename: B.pyfrom A import AAclass BB:pass

這時不管是執(zhí)行A.py還是B.py都會拋出ImportError的異常,假設(shè)我們執(zhí)行的是A.py,究其原因如下

    文件A.py執(zhí)行from B import BB,會先掃描B.py,同時在A的名字空間中為B創(chuàng)建module對象,試圖從B中查找BB 掃描B.py第一行執(zhí)行from A import AA,此時又會去掃描A.py 掃描A.py第一行執(zhí)行from B import BB,由于步驟1已經(jīng)為B創(chuàng)建module對象,所以會直接從B的module對象的__dict__中獲取BB,此時顯然BB是獲取不到的,于是拋出異常

解決這種情況有兩種辦法,

    將from B import BB改為import B,或?qū)rom A import AA改為import A 將A.py或B.py中的兩行代碼交換位置

總之,import需要注意的是,盡量在需要用到時再import

包的import

當(dāng)一個目錄下有

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 德惠市| 张家口市| 乾安县| 延安市| 玉树县| 曲麻莱县| 澎湖县| 泾阳县| 萨迦县| 溧水县| 益阳市| 杭州市| 长兴县| 隆回县| 中江县| 康定县| 会东县| 洛扎县| 台东县| 万州区| 胶州市| 林周县| 贡嘎县| 无棣县| 丽水市| 凌海市| 时尚| 松滋市| 靖州| 双江| 开鲁县| 清远市| 维西| 三江| 延川县| 珲春市| 湖州市| 益阳市| 千阳县| 庆城县| 尚志市|