包的初識與使用

2022-02-20 05:31:13 字數 3058 閱讀 5320

建立乙個aaa的包,自行建立乙個__init__py檔案

回憶 建立乙個tbjx模組發生的三件事:

將該tbjx檔案載入到記憶體.

建立乙個以tbjx命名的命名空間.

通過tbjx. 的方式引用tbjx模組的所有的名字.

建立乙個包,也會發生三件事:

將該aaa包內 __init__py檔案載入到記憶體.

建立乙個以aaa命名的命名空間.

通過aaa. 的方式引用__init__的所有的名字.

包名就是 幕後指使的 init執行

aaa包與執行檔案同級的情況

引用aaa包的__init__中的name

import aaa

print(aaa.name)#因為執行aaa 其實就是執行__inint__中內容

# 我想要引用 aaa包的m1檔案的a變數

# 錯誤示例1:

import aaa

# 1. aaa的 __init__ 裡面 寫import m1

# 2. print(aaa.m1.a)

# print(aaa.m1.a)

# 報錯原因: no module named 'm1'

# 分析報錯原因: 模組找不到 記憶體,內建,sys.path三個地方找不到.

# m1 不在記憶體,不在內建,sys.path 會主動載入執行檔案(包的使用.py)的當前目錄. 而他不在

# 解決方式:

import aaa

# 1. 在執行檔案寫入 import aaa

# 2. aaa的 __init__ 裡面 寫 from aaa import m1#m1是要引入的檔名 aaa是包名

# 3. 然後在執行檔案 aaa.m1.a

# print(aaa.m1.a) 引用 aaa包的m1的a

# print(aaa.m1.func1())#引用 aaa包的m1的func1()

# 如何在當前檔案中,引用 aaa包的bbb包中__init__中 name.

# 1. 在執行檔案寫入 import aaa

# 2. aaa的 __init__ 裡面 寫 from aaa import bbb

# 3. 然後在執行檔案 print(aaa.bbb.name)

# 如何在當前檔案中,引用 aaa包的bbb包 a1.py檔案中的 name

# 1. 在執行檔案寫入 import aaa

# 2. 在aaa包的__init__ 寫上 from aaa import bbb (這樣寫 bbb包的__init__裡面所有的名字都能引用)

# 3. 在bbb包的__init__ 寫上 from aaa.bbb import mb

4 print(aaa.bbb.a1.name)

# 首先 無論從**引用模組,import 或者 from ... import ...

# 最開始的模組或者包名一定是記憶體,內建,sys.path中能找到的.(可參考bbb包中的 __init__)

# 直接import 為了讓我們會使用 包裡面的 __init__

# 第二類: 執行檔案 通過 from ... import... 匯入包以及包內的功能

# from ... import ...

# 通過這種方式不用設定__init__檔案

我想要引用 aaa包的__init__ name

from aaa import name

print(name)

我想要引用 aaa包的 a1 檔案中name

from aaa import a1

print(a1.name)

我想要引用 aaa包的 bbb包 __init__ name

from aaa.bbb import name

print(name)

我想要引用 aaa包的 bbb包 a1檔案的中的name

from aaa.bbb import a1

print(a1.name)

重點# from a.b.c import d

# c的. 的前面一定是包

# import 的後面一定是名字 可以是檔案, 並且不能 再有點 不能有點

# from aaa.bbb.m2.func1 import a # 錯誤的

# from aaa.bbb import m2

# m2.func1()

# from nb.m1 import f1,f2

# from nb.m2 import f3,f4

# from nb.m3 import f5,f6

# 目前為止,今天所看到的引用模組的方式都是絕對匯入

# 相對匯入: . .. ......

from .m1 import f1,f2

from .m2 import f3,f4

from .m3 import f5,f6

from .dsb.ly import f7

需求# 由於nb模組增加了很多很多功能,所以我們nb這個檔案就要劃整乙個包,

# 無論對nb模組有任何操作,對於使用者來說不應該改變,極少的改變對其的呼叫. 像裝飾器

第一版 檔案變成包了 包與執行檔案 在同一目錄

使用者 使用方式

# import nb

# nb.f1()

# nb.f2()

我們的解決方式 在aaa包的__init__ 加入

from nb.m1 import f1,f2#m1 中有f1 f2

from nb.m2 import f3,f4

from nb.m3 import f5,f6

第2版 包與 執行檔案 不在同一檔案 要想執行 必須在執行檔案 新增sys 路徑

import sys

第3版 模組改名

在__init__ 裡面改成相對匯入

from .m1 import f1,f2#當前目錄上一級

from .m2 import f3,f4

from .m3 import f5,f6

Lua初識之迭代器與閉包

一 迭代器與閉包 迭代器是一種支援指標型別的結構,它可以遍歷集合的每乙個元素 在lua中我們常常使用函式來描述迭代器,每次呼叫該函式就返回集 合的下乙個元素 寫乙個方法實現迭代 function list iter t local i 0 定義區域性變數 i local n table.getn t...

C 的webclient的使用總結與初識api

獲取 api 好長時間沒用c 了,關於webclient的使用幾乎忘得差不多了,於是我在網上查了它的使用。using system using system.net using system.io public class test 屬性 作用baseaddress 獲取或設定 webclient ...

Ajax的使用初識

對於ajax,是在script標籤內進行使用的。xhr就是瀏覽器的作用 開啟瀏覽器,輸入 或者後台處理檔案 後面傳遞引數 最後的布林值決定是否非同步操作,推薦true,否則會在send部分出現停留問題。預設也是true,可以不填 xhr.open get time.php?id 564 true 傳...