日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python程序开发——第七章 模块与包

發布時間:2024/2/28 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python程序开发——第七章 模块与包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 一、模塊的定義
  • 二、導入模塊、調用模塊
    • (一)import語句
    • (二)from…import語句
  • 三、標準模塊庫
    • (一)sys模塊
    • (二)os模塊
    • (三)random模塊
    • (四)time模塊
  • 四、模塊導入特性
    • (一)__all__屬性
    • (二)__name__屬性
  • 五、dir() 模塊查找函數
  • 六、包
    • (一)包的定義
    • (二)包的創建
    • (三)包的導入

一、模塊的定義

簡單的來說,模塊就是每個以.py為后綴的Python文件,可以通過在一個Python文件中導入其它Python文件,從而使用該模塊中的類、函數、變量等等,模塊可分為內置模塊、第三方模塊以及自定義模塊。

每一個python文件都可作為一個模塊存在,文件名即為模塊名,在程序開發中,會將耦合度較低的多個功能寫入不同的文件中,制作成模塊,并在其它文件中以導入模塊的方式使用自定義模塊中的內容。

二、導入模塊、調用模塊

(一)import語句

通過import語句可以一次導入一個或多個模塊,多個模塊中各模塊使用逗號隔開,如下:

import 模塊 import 模塊1,模塊2,,模塊n

另外可通過.來使用導入的模塊中的類或函數,即模塊名稱.類名稱/函數名稱()的形式。
若模塊名稱較長,還可通過as對模塊起別名,在調用時即可通過別名來調用模塊中的內容,即import 模塊名稱 as 別名。
下列python代碼,這是一個名為module.py的文件,作為模塊:

def input_number():print("HELLO WORLD!") print("該模塊被調用!")

下列python代碼,這是一個名為123.py的文件,在該文件中引用module.py模塊文件中的input_number()函數,即module.input_number():

import module module.input_number()

運行結果如下:

(二)from…import語句

from…import…語句的格式如下:

from 模塊名稱 import 變量名稱/類名稱/函數名稱

和import語句一樣,可一次導入多個類、變量或函數,中間使用逗號隔開。另外還可以通過from … import *導入模塊中的全部內容。

三、標準模塊庫

python中自帶一些標準模塊庫,比如sys模塊、os模塊、random模塊以及time模塊等等,以下簡單地介紹這幾種標準模塊庫。

(一)sys模塊

sys模塊用于python運行時的環境操作,比如
sys.agrv獲取命令行參數列表,列表中第一個元素是該程序本身所在路徑;
sys.path用于獲取模塊的搜索路徑;
sys.exit()函數用于退出當前程序,其后的代碼不再執行,正常退出返回值為0。
下列python代碼,通過import sys引用sys模塊:

import sysprint(sys.argv) print(sys.path) print("退出程序:") sys.exit()

運行結果如下:

(二)os模塊

os模塊提供訪問操作系統(OS)服務的功能,比如os.getcwd()函數用于獲取當前腳本的工作路徑;os.chdir()函數用于改變當前腳本的工作路徑;os.remove()用于刪除指定文件;
os._exit()用于終止python程序,與sys.exit()不同,sys.exit()在執行后會引發一個SystemExit異常,若捕獲該異常則仍然會執行sys.exit()之后的代碼。
下列python代碼,通過import os引用os模塊:

import osprint(os.getcwdb())

運行結果如下:

(三)random模塊

random模塊用于產生隨機數,比如
random.random()用于返回(0,1]之間的隨機實數;
random.randint(x,y)用于返回[x,y]之間的隨機整數;
random.uniform(x,y)用于返回[x,y]之間的隨機浮點數;
random.choice(seq)用于從序列seq中隨機返回一個元素。
下列python代碼,通過import random引用random模塊:

import randomprint(random.random()) print(random.randint(1, 10)) print(random.uniform(1, 10)) number = [1, 0, 10, -10, 3] print(random.choice(number))

運行結果如下:

(四)time模塊

time模塊提供一系列關于時間處理的函數,比如
1、time.time()用于獲取當前時間,可通過該函數計算程序的執行時間。
下列python代碼,這里計算10000!,即10000的階乘,通過time()函數計算計算10000的階乘所耗費的時間:

import timebegin = time.time() print(begin) i = 1 result = 1 while i <= 10000:result = result * ii = i + 1 end = time.time() print(end) spend_time = end - begin print(f"程序執行時間為:{spend_time}")

運行結果如下:

2、time.sleep(secs)函數使程序進入休眠態,休眠時間由secs參數決定,單位為秒,通過該函數可使程序中某個功能代碼設置休眠時間,即設置一段時間間隔后執行;
下列python代碼,通過random和time模塊庫,使用random.choice()函數隨機選擇列表中的一個元素,使用time.sleep(2)表示每隔2秒執行一次循環,另外remove() 函數用于移除列表中某個值的第一個匹配項:

import random, timeclass_name = ["1班", "2班", "3班", "4班"] for i in range(len(class_name)):if len(class_name) != 0:name = random.choice(class_name)print(f"本次隨機選擇的班級是:{name}")class_name.remove(name)print(f"被選擇的{name}已被移除,2s后將進行下一次隨機選擇!")time.sleep(2) print("已隨機選擇完成!")

運行結果如下:

3、time.strptime()函數用于將一個時間格式的字符串解析為時間元組,而time.mktime()函數用于將時間元組轉換為秒數,通過這兩個模塊函數即可自定義時間戳。
下列python代碼,time…strptime()函數將2021-11-10 22:21:41轉換為時間元組,time.mktime()函數將時間元組轉換為時間戳:

import timestr_time = "2021-11-10 22:21:41" time_struct = time.strptime(str_time, "%Y-%m-%d %H:%M:%S") print(time_struct) timestamp = time.mktime(time_struct) print(timestamp)

運行結果如下:

四、模塊導入特性

(一)__all__屬性

通過在python模塊的開頭定義一個__all__屬性,可以說這個屬性是一個列表,其中包含的元素規定了在通過使用from…import*語句導入模塊時所包含的模塊內內容。
下列python代碼,module.py模塊中設置了__all__屬性,即規定導入該模塊時只能使用out_number和out_page兩個函數:

#module.py模塊 __all__ = ["out_number", "out_page"]def out_word():print("HELLO WORLD!")def out_number():a = input("請輸入一個數字:")print(f"輸入的數字為{a}")def out_page(x, y):return x * y

下列python文件test.py中導入module模塊:

#test.py from module import * print(out_page(2, 0)) out_number() out_word()

這里使用了out_word(),所以程序會報錯,顯示未定義:

正確的運行結果如下,去掉out_word() ,因為module.py模塊中__all__屬性中只允許使用out_number和out_page兩個函數:

(二)__name__屬性

__name__屬性用于在導入一個模塊時,使該模塊中的某一程序塊不執行,通常該屬性與if-else語句共同使用,若當前模塊是啟動模塊,即非測試時,設定其值為__name__=="__main__"。

__name__屬性用于在項目開發整合前避免項目運行時執行測試代碼。

下列python代碼,使用if-else條件語句:

#module.py模塊 def out_word():print("HELLO WORLD!")def out_number():a = input("請輸入一個數字:")print(f"輸入的數字為{a}")def out_page(x, y):return x * yif __name__ == "__main__":out_word()print(out_page(2, 0))out_number() else:print("另一模塊")

運行結果如下:

在另一個模塊,即test.py中導入該模塊:

#test.py模塊 from module import *out_word() print(out_page(2, 0)) out_number()

運行結果如下,可看到“另一模塊”:

五、dir() 模塊查找函數

dir()函數是一個內置函數,可以通過它查找到模塊內所有定義的名稱,并且以字符串列表的形式返回。

#module.py模塊 __all__ = ["out_number", "out_page"]def out_word():print("HELLO WORLD!")def out_number():a = input("請輸入一個數字:")print(f"輸入的數字為{a}")def out_page(x, y):return x * y

查找module模塊中所有定義的名稱,可分為有參和無參,無參時則會返回所有定義的名稱:

#test.py import moduleprint(dir()) print(dir(module))

運行結果如下:

六、包

(一)包的定義

為了更好理清python代碼,根據不同類別將模塊歸類劃分,并將功能相近的模塊放在同一個目錄下,使其層次化,從而形成了包,包是一個包含__init__.py文件的目錄,且該文件必須存在但可以為空,另外目錄下還有子包以及一些模塊。

包的存在可在一定程度上避免合作開發中模塊重名的問題,包中的init文件作用是標識當前目錄是一個python包以及模糊導入,即當該文件中沒有聲明__all__屬性時,則使用from…import*導入的內容為空。

(二)包的創建

這里只介紹PyCharm中如何創建一個包的步驟,版本為 Community Edition 2021.2.1。
1、點擊左上角的新建:

或在項目中右鍵新建:

2、選擇python軟件包(python package),點擊設置文件名稱。

3、可在項目欄看到創建的package1軟件包。
可以展開看到有個默認的__init__.py文件:

(三)包的導入

包的導入與模塊的導入一樣,使用import語句以及from…import語句,但在導入包中的模塊時,使用時需要在模塊名稱前加上包的名稱,即包的名稱.模塊名稱,若是使用已導入模塊中的函數則通過包的名稱.模塊名稱.函數名稱實現。
下列python代碼,創建package1軟件包,其中包括__init__.py文件、module1.py和module2.py文件:

#__init__.py #module1.py def out_word():print("HELLO WORLD!") #module2.py def out_number():a = input("請輸入一個數字:")print(f"輸入的數字為{a}")def out_page(x, y):return x * y

項目欄中:

使用另一個模塊test.py導入該包,且通過import語句導入該包:

#test.py import package1.module1 import package1.module2package1.module1.out_word() package1.module2.out_number() print(package1.module2.out_page(2, 3))

運行結果如下:

總結

以上是生活随笔為你收集整理的Python程序开发——第七章 模块与包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。