python模組與包

2021-07-10 17:23:44 字數 3123 閱讀 7417

路徑修改

命令列怎麼檢視路徑,修改路徑:

#列印當前搜尋路徑

import sys

sys.path

sys.path

import os

os.getcwd()

os.chdir("c:\\www\\")

模組實現
構建模組的初衷就是將一些同類的東西進行打包, 以免汙染全域性空間, 在python的模組裡, 對需要隱藏的屬性和函式都可以採用__all__來實現,__all__只給出列出想要公共介面和屬性, 當前前提是只使用from modu import *來導入庫, 如果使用import modu則會匯入所有的屬性; 如下面的模組」lot2html」(下面的**內容不重要):

#coding=utf-8

''' 定義了乙個模組,提供將log.txt轉換成html的格式

'''from ohtml import *

import re

oh = ohtml() #這是其它地方定義的乙個類

#這裡只公開cretasklog這個介面

__all__ = ["cretasklog"]

defdeallogstr

(line):

pass

def__parsetasklog

(logf):

pass

defcretasklog

(logf,htmlf,title):

''' 將測試log檔案建立html各式的檔案

:param logf: from log path and filename

:param htmlf: to log path and filename

:param title: html title

'''ostr,errstr,skpstr = __parsetasklog(logf)

f=open(htmlf,'w+')

htmlstr = oh.crehtml(ostr,title=title,errstr=errstr,skstr=skpstr)

f.write(htmlstr)

f.close()

當在其它地方使用這個模組時, 可以使用from log2html import *或者import log2html,而這兩者存在區別,

1.imprt log2html匯入時, 模組裡的所有函式都可以被呼叫, 也就是all對其沒有影響;

2.from log2html import *則是優先處理了__all__中的, 如果有該屬性則值提供__all__裡面的屬性, 如這裡只能讀到cretasklog函式, 其它函式都被封裝; 奇怪的是, 網上的資料說如果沒有__all__則會讀取所有不是以下劃線開頭的屬性, 而我這裡測試發現, 外部可以照樣訪問__parsetasklog函式, 還不清楚什麼原因;

總結:推薦使用from log2html import *__al__屬性達到封裝效果;

包處理

當前測試的包名為ohtml, 同名資料夾裡有__init__.py和上面的」log2html.py」 等其他模組;

這裡也主要分析包的封裝特性;

先在測試**裡文件裡加入路徑:

import sys

sys.path

這時__init__裡面什麼也不寫, 用import ohtmlfrom ohtml import *後,發現都找不到模組log2html,可見 對於包的匯入,必須在初始化文件裡加入想要匯出的模組資訊;

__init__裡面加上import log2html後,可以正常訪問模組裡面的所有函式, 當然要加上ohtml的字首,如ohtml.log2html.cretasklog__init__將上面的import log2html改為__al__=["log2html"]後,發現使用import ohtml是無法讀取到模組的, 只能使用from ohtml import*才可以, 切此時可以訪問到log2html;模組的所有屬性, 好像沒有封裝;

總結: package的使用,__init__是必須要新增所要匯出的模組的, 可以通過寫__al__和 import … 來完成;

而這兩者之間的區別,目前還不是很清楚, 以後有機會再去拜讀下原始碼;

import 匯入操作制發生一次;

要重新匯入則乙個del module後再操作

對比

import是直接匯入整個內容, 操作的修改會修改記憶體中的整個module的資料;

from 是到複製版本, 修改內容不會影響到原先記憶體中的module;

模組就是命名空間

通過moud.__dict__.keys()可以看到裡面的屬性(包含定義的一些變數 和一些本來就有的變數)

如:

moud.__file__是路徑;

moud.__dco__是說明字元

reload
import moud

# do something

from imp import reload

reload(moud)

python 模組與包

模組與包 1.什麼是模組 在 python 中,乙個.py檔案就稱之為乙個模組 module 模組的優點 大大提高了 的可維護性 編寫 不必從零開始。當乙個模組編寫完畢,就可以被其他地方引用 2.匯入模組的幾種方式 4.模組的分類 1 內建模組 os,sys,dnspython,socket,tim...

python包與模組

python模組 py檔案就是模組 1.在同乙個工作目錄 呼叫其他模組裡面的方法一 import module 呼叫 module.function 注意 此時import module時,在執行當前 時,會先執行被import的module裡的 import module as m1 別名,類似w...

python模組與包

模組 在 python 中,乙個.py檔案就稱之為乙個模組 module 大大提高了 的可維護性 編寫 不必從零開始。當乙個模組編寫完畢,就可以被其他地方引用 建立乙個phello.py的檔案,輸出hello 在另乙個函式內匯入模組。包 如果不同的人編寫的模組名相同怎麼辦?為了避免模組名衝 突,py...