二、載入模組
三、使用包
四、檢視模組內容
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...