001 包和模組

2022-02-20 06:19:32 字數 3640 閱讀 6462

目錄包

import os

import time, json

from decimal import decimal

from decimal import decimal as d

from django.views.decorators.csrf import csrf_exempt

from django.shortcuts import *

import sys

print(sys.path)

包是一種管理 python 模組命名空間的形式,採用"點模組名稱"。

比如乙個模組的名稱是 a.b, 那麼他表示乙個包 a中的子模組 b 。

就好像使用模組的時候,你不用擔心不同模組之間的全域性變數相互影響一樣,採用點模組名稱這種形式也不用擔心不同庫之間的模組重名的情況。

這樣不同的作者都可以提供 numpy 模組,或者是 python 圖形庫。

建立包會自動生成__init__.py檔案

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

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

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

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

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

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

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

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

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

import 方式匯入
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方式匯入
# 第二類: 執行檔案 通過 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

from .. import settings

python 模組和包 python模組和包

一.模組 python 模組 module 是乙個 python 檔案,以 py 結尾,包含了 python 物件定義和python語句。模組能定義函式,類和變數,模組裡也能包含可執行的 二.匯入模組 1.語法 import模組名from 模組名 import功能名from 模組名 import i...

Python模組 包和內建模組

模組命名規範 匯入方式 注意 1 模組名要符合識別符號命名規範 2 匯入模組會將模組中的 執行一遍,只有第一次匯入生效 import 模組名 使用方式 模組名.變數或 模組名.函式名 import 模組名 as 別名 import 模組1,模組2 from.import.如果當前檔案中的變數或者函式...

Perl 包和模組

模組就是用包來實現的 使 段不發生衝突而用以分開 的空間。把變數和函式分為不同區間的標記。不同空間中的變數或函式可以同名。使用變數要帶上名空間的字首 name a。用包來實現名字空間 乙個包就是乙個檔案 perl5 用包來建立模組 require 類似c語言的include 把其他地方寫好的程式包含...