第九章 python 模組和包

2021-10-02 16:44:35 字數 4091 閱讀 9660

二、載入模組

三、使用包

四、檢視模組內容

import語句主要有兩種用法。

import sys

import sys as s

import sys, os

import sys as s, os as o

from sys import ar**

from sys import ar** as v

from sys import ar**, winver

from sys import ar** as v, winver as wv

from sys import *

讓python能找到我們編寫(或第三方提供)的模組,可以用以下兩種方式來告訴它。

「.」:表示當前路徑

sys.path變數代表,檢視python預設的模組載入路徑

**如下:

import sys, pprint

pprint.pprint(sys.path)

通常來說,我們應該將python的擴充套件模組新增在lib\site-packages路徑下,它專門用於存放python的擴充套件模組和包。

列印由星號組成的乙個三角形

**如下:

'''

簡單的模組,該模組包含以下內容

my_list:儲存列表的變數

print_********: 使用星號列印三角形的函式

'''my_list =

['python'

,'kotlin'

,'swift'

]def

print_********

(n):

'''使用星號列印乙個三角形'''

if n <=0:

raise valueerror(

'n必須大於0'

)for i in

range

(n):

print

(' '

*(n - i -1)

, end='')

print

('*'*(

2* i +1)

, end='')

print(''

)# ====以下是測試**====

deftest_print_********()

: print_********(3)

print_********(4)

print_********(7)

if __name__ ==

'__main__'

: test_print_********(

)

有時候模組中雖然包含很多成員,但並不希望每個成員都被暴露出來供外界使用,此時可借助於模組的_all_變數,將變數的值設定成乙個列表,只有該列表中的程式單元才會被暴露出來。

**如下:

'測試__all__變數的模組'

defhello()

:print

("hello, python"

)def

world()

:print

("pyhton world is funny"

)def

test()

:print

('--test--'

)# 定義__all__變數,指定預設只匯入hello和world兩個程式單元

__all__ =

['hello'

,'world'

]

# 匯入all_module模組內所有成員

from all_module import

*hello(

)world(

)test(

)# 會提示找不到test()函式

希望程式使用模組內_all_列表之外的程式單元,、有兩種解決方法。

從物理上看,包就是乙個資料夾,在該資料夾下包含了乙個_init_.py檔案,該資料夾可

用於包含多個模組原始檔。

從邏輯上看,包的本質依然是模組。

包的作用是包含多個模組,但包的本質依然是模組,因此包也可以用於包含包。

①建立乙個資料夾,該資料夾的名字就是該包的包名。

②在該資料夾內新增乙個_init_.py檔案即可。

fk_package包:

# 匯入fk_package包,實際上就是匯入包下__init__.py檔案

import fk_package

# 匯入fk_package包下的print_shape模組,

# 實際上就是匯入fk_package目錄下的print_shape.py

import fk_package.print_shape

# 實際上就是匯入fk_package包(模組)匯入print_shape模組

from fk_package import billing

# 匯入fk_package包下的arithmetic_chart模組,

# 實際上就是匯入fk_package目錄下的arithmetic_chart.py

import fk_package.arithmetic_chart

fk_package.print_shape.print_blank_********(5)

im = billing.item(

4.5)

print

(im)

fk_package.arithmetic_chart.print_multiple_chart(

5)

上面程式雖然可以正常執行,但此時存在兩個問題。

想一想就知道:包內的_init_.py檔案並不是用來定義程式單元的,而是用於匯入該包內模組的成員,這樣即可把模組中的成員匯入變成包內成員,以後使用起來會更加方便。

__ init __.py**如下:

# 從當前包匯入print_shape模組

from

.import print_shape

# 從.print_shape匯入所有程式單元到fk_package中

from

.print_shape import

*# 從當前包匯入billing模組

from

.import billing

# 從.billing匯入所有程式單元到fk_package中

from

.billing import

*# 從當前包匯入arithmetic_chart模組

from

.import arithmetic_chart

# 從.arithmetic_chart匯入所有程式單元到fk_package中

from

.arithmetic_chart import

*

# 匯入fk_package包,實際上就是匯入包下__init__.py檔案

import fk_package

# 直接使用fk_package字首即可呼叫它所包含的模組內的程式單元。

fk_package.print_blank_********(5)

im = fk_package.item(

4.5)

print

(im)

fk_package.print_multiple_chart(

5)

通過如下兩種方式。

dir 去掉「_」開頭的程式單元

import string

[e for e in

dir(string)

ifnot e.startswith(

'_')

]# 或者

string.__all__

help(string.capwords)和print(string.capwords.__doc __)兩個命令的輸出結果完全相同

除可以檢視模組的幫助資訊之外,還可以直接閱讀模組的源**來掌握模組功能,提公升python程式設計能力。

通過模組的_file_屬性即可檢視到指定模組的原始檔路徑。

string.__file __

第九章 函式與模組

大家都知道c語言是一種面向過程的語言,它的特點就是對步驟和過程的細節操作。當面臨編寫大型的程式時,量是會很多的。都是細節的話,很不容易抓住重點的,程式可讀性和維護性都很低。為了克服這個缺點,有了模組化的程式設計思想。把能夠實現特定功能的 塊包裝起來,放到函式裡面 需要使用的時候,直接整體呼叫。這樣每...

第九章(筆記)

轉移指令是可以修改ip,或同時修改cs和ip的指令 offset 是用於提取標號偏移位址的操作符 jmp在第2章裡說到時用於修改ip或同時修改cs和ip的轉移指令,這章裡單獨的jmp指令是乙個無條件的轉移指令 jmp short 標號 是實現段內短轉移 jmp near ptr 標號 是實現段內近轉...

第九章作業

班級 0401304 學號 2013211526 姓名 鄧小俊 2.身份驗證 依據使用者所提供的身份資訊,來進行登入驗證,可以再細分為使用者是否可以登入sql sever 使用者是否可以登入到指定的目標資料庫等。授權 已通過身份驗證的使用者,檢查其所被賦予的許可權,是否可以訪問或者執行目標的物件 3...