Python---自定義模塊

1、什么是自定義模塊

在Python中,模塊一共可以分為兩大類:內置系統模塊 和 自定義模塊

模塊的本質:在Python中,模塊的本質就是一個Python的獨立文件(后綴名.py),里面可以包含全局變量、函數以及類。

注:在Python中,每個Python文件都可以作為一個模塊,模塊的名字就是文件的名字。也就是說自定義模塊名必須要符合標識符命名規則。

?

2、定義一個自定義模塊

案例:在Python項目中創建一個自定義文件,如my_module1.py

def sum_num(num1, num2):
? ? return num1 + num2

3、導入自定義模塊

import 模塊名稱

from 模塊名稱 import 功能名

案例:

import my_module1


# 調用my_module1模塊中自定義的sum_num方法
print(my_module1.sum_num(10, 20))

4、自定義模塊中功能測試

在我們編寫完自定義模塊以后,最好在模塊中對代碼進行提前測試,以防止有任何異常。

引入一個魔方方法:__name__,其保存的內存就是一個字符串類型的數據。

隨著運行頁面的不同,其返回結果也是不同的:

① 如果__name__是在當前頁面運行時,其返回結果為__main__

② 如果__name__在第三方頁面導入運行時,其返回結果為模塊名稱

基于以上特性,我們可以把__name__編寫在自定義模塊中,其語法如下:

if __name__ == '__main__':
? ? # 執行測試代碼

__name__魔術方法除了可以在自定義模塊中測試使用,還可以用于編寫程序的入口:

# 定義一個main方法(入口文件)
def main():
? ? # 執行我們要執行的功能
? ? # ① 打印選擇菜單
? ? # ② 添加學員信息
? ? # ③ 刪除學員信息
? ? # ...
? ??
# 調用執行入口
if __name__ == '__main__':
? ? main()

5、多模塊中功能命名沖突問題

☆ 命名沖突

當我們編寫了多個模塊時,可能在導入到其他頁面時,會產生一個問題:全局變量、函數、類出現重名情況,我們把這個情況就稱之為“命名沖突”。

如導入my_module2和my_module3,里面都封裝了一個func()方法,其在導入以后,my_module3中的func()方法就會覆蓋my_module2中的func()方法。

my_module2.py

def func():
? ? print('my_module2中的func方法')

my_module3.py

def func():
? ? print('my_module3中的func方法')

導入到其他Python文件中,測試效果:

from my_module2 import func
from my_module3 import func

func()

☆ 解決方案

① 把所有模塊的導入方式都寫入文件的最上面,如果發現命名沖突了,馬上和模塊的開發人員進行功能核對

② 給重名的方法進行as重命名

from my_module2 import func as my_module2_func
from my_module3 import func as my_module3_func

6、模塊命名的注意事項

在實際項目開發中,一定要特別注意:我們自定義的模塊名稱一定不能和系統內置的模塊名稱相同,否則會導致代碼無法正常執行。

舉個栗子:定義一個與系統內置模塊同名的模塊

random.py

08-Python中引入與系統模塊同名的自定義模塊.py

import random

print(random.randint(-100, 100))

randint屬于random模塊的內置方法,不可能存在找不到的情況。之所以出現以上問題的主要原因在于:我們的項目中存在了一個與系統模塊同名的模塊文件。所以其在引用random模塊式,其執行順序:

引入某個模塊 => 當前項目中尋找是否有同名的文件 => 如果找到則直接使用,未找到 => 繼續向上尋找 => Python解析器中

如何證明:模塊的引用一定是按照你說的這個順序呢?

答:使用__file__魔術方法

print(random.__file__)

7、__all__魔術方法

如果一個模塊文件中有__all__變量,當使用from xxx import *導入時,只能導入這個列表中的元素。

主要功能:限制使用模塊中的某些功能,也就是說你導入后可以使用的方法只能是__all__中封裝好的方法。

案例:

my_module.py

__all__ = ['func1']

def func1():
? ? print('func1方法')

def func2():
? ? print('func2方法')

09-Python中限制引用模塊中的方法.py

from my_module import *

func1()
func2() ?# 報錯

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212962.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212962.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212962.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

大廠算法指南:優選算法 ——雙指針篇(下)

大廠算法指南:優選算法 ——雙指針篇(上) 前言:雙指針簡介一、[611. 有效三角形的個數](https://leetcode.cn/problems/valid-triangle-number/)1.1 算法思路(排序 雙指針)1.2 代碼實現 二、[LCR 179. 查找…

[GPT]Andrej Karpathy微軟Build大會GPT演講(下)--該如何使用GPT助手

該如何使用GPT助手--將GPT助手模型應用于問題 現在我要換個方向,讓我們看看如何最好地將 GPT 助手模型應用于您的問題。 現在我想在一個具體示例的場景里展示。讓我們在這里使用一個具體示例。 假設你正在寫一篇文章或一篇博客文章,你打算在最后寫這句話。 加州的人口是阿拉…

佳明(Garmin) fēnix 7X 增加小睡檢測功能

文章目錄 (一)零星小睡(二)小睡檢測(三)吐槽佳明(3.1)心率檢測(3.2)光線感應器(3.3)手表重量(3.4)手表續航 &a…

保姆級 | XSS Platform環境搭建

0x00 前言 XSS Platform 平臺主要是用作驗證跨站腳本攻擊。該平臺可以部署在本地或服務器環境中。我們可以使用 XSS Platfrom 平臺搭建、學習或驗證各種類型的 XSS 漏洞。 0x01 環境說明 HECS(云耀云服務器)xss platformUbuntu 22.04Nginx 1.24.0MySQL 5.6.51Pure-Ftpd 1.0.49…

最新接口自動化測試面試題

前言 前面總結了一篇關于接口測試的常規面試題,現在接口自動化測試用的比較多,也是被很多公司看好。那么想做接口自動化測試需要具備哪些能力呢? 也就是面試的過程中,面試官會考哪些問題,知道你是不是真的做過接口自…

大數據面試總結 二

1、事實表主要分成幾種: 1、事務事實表:又稱作原子事實表,主要是用來描述業務過程,跟蹤控件或者時間上某點的度量事件,保存的是最原子的數據 2、周期事實表:以一個周期作為一個時間間隔,用來記…

2021版吳恩達深度學習課程Deeplearning.ai 05序列模型 12.5

學習內容 05.序列模型 1.1 為什么用序列模型 1.序列模型常見的應用 1.2 注釋 notation 1.*T_x(i)表示訓練樣本x(i)的序列長度,T_y(i)表示target(i)的序列長度2.訓練集表示單詞的方式*構建字典的方式*在訓練集中查找出現頻率最高的單詞*網絡搜集常用字典3.如果遇…

【C語言快速學習基礎篇】之一基礎類型、進制轉換、數據位寬

文章目錄 一、基礎類型(根據系統不同占用字節數會有變化)1.1、有符號整形1.2、無符號整形1.3、字符型1.4、浮點型1.5、布爾型 二、進制轉換2.1、二進制2.2、八進制2.3、十進制2.4、十六進制2.5、N進制2.6、進制轉換關系對應表 三、數據位寬3.1、位3.2、字節3.3、字3.4、雙字3.5…

程序員常用英文單詞

英語對于程序員來說多么重要應該無需過多解釋了,把近期在網上收集到的分享到這里供大家學習交流。 PS:感謝原作者的收集,謝謝。 A abstract 抽象的 abstract base class (ABC) 抽象基類abstract class 抽象類 abstraction 抽象、抽象物、抽象…

【數據結構高階】紅黑樹

目錄 一、紅黑樹的概念 二、紅黑樹的性質 2.1 紅黑樹與AVL樹的比較 三、紅黑樹的實現 3.1 紅黑樹節點的定義 3.2 數據的插入 3.2.1 紅黑樹的調整思路 3.2.1.1 cur為紅,f為紅,g為黑,u存在且為紅 3.2.1.2 cur為紅,f為紅&am…

【重點】【LCA】236. 二叉樹的最近公共祖先

題目 class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root null || root p || root q) {return root;}TreeNode left lowestCommonAncestor(root.left, p, q);TreeNode right lowestCommonAncestor(root.right, p, …

【重點】【DFS】124.二叉樹中的最大路徑和

題目 和求二叉樹直徑相同套路 class Solution {private int max Integer.MIN_VALUE;public int maxPathSum(TreeNode root) {if (root null) {return 0;}dfs(root);return max;}// 返回經過root的單邊分支最大和public int dfs(TreeNode root) {if (root null) {return 0;}…

IT新聞資訊系統,使用mysql作為后臺數據庫,此系統具有顯示數據庫中的所有信息和刪除兩大功能。

表的準備: -- MySQL Administrator dump 1.4 -- -- ------------------------------------------------------ -- Server version 5.1.40-community /*!40101 SET OLD_CHARACTER_SET_CLIENTCHARACTER_SET_CLIENT */; /*!40101 SET OLD_CHARACTER_SET_RESULTSCHAR…

LTP測試

LTP 測試 LTP套件是由 Linux Test Project 所開發的一套系統測試套件。它基于系統資源的利用率統計開發了一個測試的組合,為系統提供足夠的壓力。通過壓力測試來判斷系統的穩定性和可靠性。壓力測試是一種破壞性的測試,即系統在非正常的、超負荷的條件下的運行情況 。用來評估…

mysql庫名規范

mysql庫名的一些規范和建議: 庫名以小寫字母、數字、下劃線組成,不要以數字開頭。建議不要超過32個字符,但盡量用簡短的名稱。因為很多地方用到庫名,如果庫名太長,容易出錯。庫名選擇有意義的名稱,盡量與應…

55.手寫實現grpc連接池以及gin和grpc交互

文章目錄 一、簡介前置說明 二、敏感詞過濾服務1、定義sensitive.proto文件2、protoc生成pb.go文件3、sensitive服務端實現 三、關鍵詞匹配服務1、編寫keywords.proto文件2、生成pb.go文件3、keywords服務端實現 四、gin web 路由服務1、新建grpcpool服務作為gin web服務2、根據…

GEE影像升尺度(10m->250m)

GEE影像升尺度(10m->250m) 代碼 var ext /* color: #d63000 *//* shown: false *//* displayProperties: [{"type": "rectangle"}] */ee.Geometry.Polygon([[[108.74625980473367, 28.562445155322063],[108.74625980473367, …

【MySQL】之死鎖問題及其解決方案

前言 數據庫死鎖問題是我們老生常談的問題了,在我們實際開發過程中經常會遇到,為了盡量避免出現死鎖,我們需要了解出現死鎖的場景。同時,如果線上出現了死鎖之后怎么去分析、排查和解決,下面我就這兩點介紹一下。 一、…

ubuntu22.04 怎么開啟SSH服務

在 Ubuntu 22.04 LTS 中,默認情況下不會自動啟動 SSH 服務。如果你想通過 SSH 訪問你的 Ubuntu 系統,你需要手動安裝 SSH 服務器,并確保 22 端口(SSH 的默認端口)是開放的。以下是必要的步驟: 安裝 SSH 服…