python 基礎 day16模組

2021-09-29 08:27:13 字數 4354 閱讀 8175

模組就是 python 程式。換句話說,任何 python 程式都可以作為模組,包括在前面章節中寫的所有 python 程式,都可以作為模組。

**的可重用性體現在,當編寫好乙個模組後,只要程式設計過程中需要用到該模組中的某個功能(由變數、函式、類實現),無需做重複性的編寫工作,直接在程式中匯入該模組即可使用該功能。

def

hello()

:print

("hello world"

)

再在桌面建立另乙個say.py檔案包含**

import hello

hello.hello(

)#hello world

hello.py 就是乙個自定義的模組,我們只需要將 hellp.py 模組匯入到 say.py 檔案中,就可以直接在 say.py 檔案中使用模組中的資源。

當呼叫模組中的 hello() 函式時,使用的語法格式為「模組名.函式」,這是因為,相對於 say.py 檔案,hello.py 檔案中的**自成乙個命名空間,因此在呼叫其他模組中的函式時,需要明確指明函式的出處,否則 python 直譯器將會報錯。

命名空間表示識別符號的可見範圍,乙個識別符號可以在多個命名空間之中定義,在不同命名空間的含義互不相干

命名空間因為物件不同可以分為以下幾種

import的用法:

匯入指定模組中的所有成員(包括變數、函式、類等)。但是匯入模組中的成員時候需要使用模組名(別名)作為字首

只會匯入模組中指定的成員,而不是全部成員。同時,當程式中使用該成員時,無需附加任何字首,直接使用成員名(或別名)即可。

import sys

print

(sys.ar**[0]

)#c:/users/lenovo/pycharmprojects/untitled/123.py

sys 模組下的 ar** 變數用於獲取執行 python 程式的命令列引數,其中 ar**[0] 用於獲取當前 python 程式的儲存路徑

為模組指定別名

import sys as s

print

(s.ar**[0]

)#c:/users/lenovo/pycharmprojects/untitled/123.py

一次匯入多個模組,使用「,」逗號分隔開

# 匯入sys、os兩個模組

import sys,os

# 使用模組名作為字首來訪問模組中的成員

print

(sys.ar**[0]

)# os模組的sep變數代表平台上的路徑分隔符

print

(os.sep)

執行結果

c:/users/lenovo/pycharmprojects/untitled/123.py

\

from sys import ar** as s

print

(s[0])

#c:/users/lenovo/pycharmprojects/untitled/123.py

一般不建議一次匯入模組裡的所以成員

模組的另乙個重要特性就是**的重用

#py1.py

defc2f

(cel)

: fah=cel*

1.8+

32return fah

deff2c

(fah)

: cel=

(fah-32)

/1.8

return cel

deftest()

:print

("測試,0攝氏度=%.2f華氏度"

% c2f(0)

)print

("測試,0華氏度=%.2f攝氏度"

% f2c(0)

)test(

)#測試,0攝氏度=32.00華氏度

#測試,0華氏度=-17.78攝氏度

在另外乙個檔案(py2.py)中匯入在呼叫

#py2.py

import py1

print

("32攝氏度=%.2f華氏度"

%py1.c2f(32)

)#測試,0攝氏度=32.00華氏度

#測試,0華氏度=-17.78攝氏度

#32攝氏度=89.60華氏度

py2將py1中的測試和函式也一塊執行了避免這樣情況,需要使用板塊中的__name__屬性:

在作為程式執行時__name__屬性的值是』__main__』,而作為模組匯入時候這個的值就是該模組的名字英雌就容易理解 if _\name__=』__main__'的意思

def

c2f(cel)

: fah=cel*

1.8+

32return fah

deff2c

(fah)

: cel=

(fah-32)

/1.8

return cel

deftest()

:print

("測試,0攝氏度=%.2f華氏度"

% c2f(0)

)print

("測試,0華氏度=%.2f攝氏度"

% f2c(0)

)if _——name__=

'__main__':

test(

)#測試,0攝氏度=32.00華氏度

#測試,0華氏度=-17.78攝氏度

確保只有單獨執行py1.py才能執行test函式

當直譯器遇到 import 語句,如果模組在當前的搜尋路徑就會被匯入。

我們使用 import 語句的時候,python 直譯器是怎樣找到對應的檔案的呢?

這就涉及到 python 的搜尋路徑,搜尋路徑是由一系列目錄名組成的,python 直譯器就依次從這些目錄中去尋找所引入的模組。

搜尋路徑是在 python 編譯或安裝的時候確定的,安裝新的庫應該也會修改。搜尋路徑被儲存在 sys 模組中的 path 變數中。

import sys

print

(sys.path)

#['c:\\users\\lenovo\\pycharmprojects\\untitled', 'c:\\users\\lenovo\\pycharmprojects\\untitled', 'e:\\python37\\python37.zip', 'e:\\python37\\dlls', 'e:\\python37\\lib', 'e:\\python37', 'e:\\python37\\lib\\site-packages']

面對模組名重複問題,python提供了包(package)的概念,包用來管理python模組命名空間的形式,採用「點模組名稱」

建立包的步驟:

fk_package

┠──init.py

┠── module1.py

┗━━ module2.py

注意,包的本質就是模組,

因此匯入包和匯入模組的語法類似

import 包名[.模組名 [as 別名]]

from 包名 import 模組名 [as 別名]

from 包名.模組名 import 成員名 [as 別名]

與模組類似,包被匯入之後,會在包目錄下生成乙個pycache資料夾,並在該資料夾內為包生成乙個init.cpython-36.pyc 檔案。

通過此語法格式匯入包中的指定模組後,在使用該模組中的成員(變數、函式、類)時,需新增「包名.模組名」為字首。

當匯入指定包時,程式會自動執行該包所對應資料夾下的init.py 檔案中的**。需要注意的是,當使用此語法格式僅匯入包名時:

import first_packagefirst_package.module1.display(20)

#attributeerror: module 'first_package' has no attribute 'module1'

直接匯入包名,並不會將包中所有模組全部匯入到程式中,它的作用僅僅是匯入並執行包下的init.py 檔案,

Python學習筆記 Day16

今日大綱 一 物件導向的組合 組合 給乙個類的物件封裝乙個屬性,這個屬性就是另乙個類的物件 組合的意義 讓乙個類的物件和另乙個類的物件產生關係,讓乙個類和另乙個類產生關係 如何組合 1 在類1中定義乙個方法,類1的物件1在執行這個方法的時候能增加乙個屬性,屬性值就是類2的物件2 2 物件1執行這個方...

re模組和物件導向day16

compile 正規表示式 編譯正規表示式,建立正規表示式物件1 fullmatch 正規表示式,字串 讓整個字串和正常則表示式進行匹配 2 match 正規表示式,字串 匹配字串開頭 如果匹配不到結果是none,如果匹配成功了,結果是匹配物件re str r d result match re s...

實習日記 Day16

今日份新想法 今天不在公司寫實習日記啦,在回學校的路上寫 今日地鐵 思 今天中午飯後,帶著我去了公司 附近的公園遛彎兒。一路走得飛快,興致勃勃。跟他的健步比起來,我一點都沒有年輕人該有的朝氣與活力 這才上班半個月,我現在週末的狀態就完全不比往日,變得昏昏欲睡,萎靡不振。在辦公室久坐,的確是不行啊。今...