從零開始的python學習(九)P129+P130+P131+P132+P133

本文章記錄觀看B站python教程學習筆記和實踐感悟,視頻鏈接:【花了2萬多買的Python教程全套,現在分享給大家,入門到精通(Python全棧開發教程)】 https://www.bilibili.com/video/BV1wD4y1o7AS/?p=6&share_source=copy_web&vd_source=404581381724503685cb98601d6706fb

上節課學習本章總結,章節選擇題,實戰一:計算圓的面積和周長,實戰二:定義學生類錄入5個學生,實戰三:使用面對對象思想實現樂隊演奏,實戰四:使用面向對象思想編寫出租車和家用轎車類,本節課學習模塊的簡介及自定義模塊,模塊的導入,Python中的包,主程序運行,Python中常用的內置模塊及random模塊中常用函數的使用。

下面進入第十章(第一章是python的安裝沒有在博文中體現,這里標注的九是從第二章開始的),關于程序的模塊,我認為是比較重要的一部分,因為后續寫論文編寫代碼都是依靠這個框架搭建。

1.模塊的簡介及自定義模塊

如何定義模塊:

#模型的定義,命名這個文件名為my_info,因為模塊名稱必須為小寫字母和下劃線
#定義模塊的變量
#定定義模塊的函數
name='L'
def info():print(f'大家好我叫{name}')

2.模塊的導入

兩個調用方式如上。具體使用案例如下:

首先我們定義兩個模塊(兩個python文件)

模塊一my_info.py:

name='L'
def info():print(f'大家好我叫{name}')

模塊二introduce.py:

name='K'
age=18
def info():print(f'姓名:{name},年齡:{age}')

?使用上面兩個模塊,導入:

#(1)調用模塊的方法:import以后使用“模塊名.函數名()”
import my_info
print(my_info.name)
my_info.info()#還可以“模塊別名.函數名()”
import my_info as a
print(a.name)
a.info()#(2)from..import..
from my_info import name #導入的一個具體的變量的名稱
from my_info import info #導入的一個具體的函數的名稱
print(name) #此時不需要“模塊名.”,直接使用變量名和函數名
info()#通配符,意思就是調用這個模塊里面的所有內容
from my_info import *
print(name)
info()#同時導入多個模塊,用逗號分割
import math,time,random

如果有兩個模塊的變量和函數名字一樣,那么如何處理這種情況:

from my_info import *
from introduce import *
#導入模塊中具有同名的變量和函數,后導入的會將之前導入的覆蓋
info()#如果我既想使用info中的函數也想使用introduce的函數,也就是不想覆蓋其中一個方案
#解決方案:使用import
import my_info
import introduce
#使用模塊中的函數或變量時,模塊名打點調用
my_info.info()
introduce.info()

運行結果如下:

姓名:K,年齡:18
大家好我叫L
姓名:K,年齡:18進程已結束,退出代碼為 0

3.Python中的包

你也許經常從師兄師姐那里聽到做科研就是“調包”,那么什么是調包?包又是個什么東西?

包的作用是避免模塊名稱相沖突的問題,一個包類似于電腦中一個文件夾,它只比文件夾多了一個叫做initpy的文件,將功能相似的模塊放入一個包內從而方便模塊的組織和管理。注意建立包的時候的名字必須是英文不允許出現漢字。

?可以看到chap10文件夾和名為admin的包的區別就是,包一旦創建就會有_init_.py這個文件。在編寫包的時候可以編寫這個_init_.py也可以不編寫,比方說我們可以在_init_.py這個文件里編寫下面這些內容:

print('Hello World!')
print('How are you?')

?選中admin這個包,單擊右鍵選擇新建python文件,比如我們命名為my_admin.py具體內容如下:

def info():print('大家好,我叫ysj,今年18歲')
name='ysj'

?在chap10這個文件中新建一個python文件,想辦法能從包中調用模塊,語法為“包名.模塊名”或者“from 包名 import 模塊名 as 別名”,還有“from 包名.模塊名 import 函數/變量等”內容可以編寫如下:

import admin.my_admin as a #包名.模塊名 其中admin為包名,my_admin為模塊名(模塊就是那個對應的python文件)
a.info() #此時一定會先執行_init_的內容,而且是自動執行的print('-'*40)
from admin import my_admin as b #from 包名 import 模塊名 as 別名
b.info()print('-'*40)
from admin.my_admin import info #from 包名.模塊名 import 函數/變量等
info() #此時在使用info這個函數的時候直接調用名字即可,不需要說明哪一個模塊from admin.my_admin import * #from 包名.模塊名 import *
print(name)

運行結果如下:

Hello World!
How are you?
大家好,我叫ysj,今年18歲
----------------------------------------
大家好,我叫ysj,今年18歲
----------------------------------------
大家好,我叫ysj,今年18歲
ysj進程已結束,退出代碼為 0

4.主程序運行

現在有兩個模塊model_a和model_b,前者的內容如下:

print('welcome to Beijing')
name='ysj'
print(name)

?model_b的內容如下:

#導入的代碼
import model_a

此時執行model_b的代碼輸出的結果就是運行model_a的內容:

welcome to Beijing
ysj進程已結束,退出代碼為 0

那么如果我們不想要執行model_a的內容,像是

if __name__ == '__main__':

只需要先打上main,然后回車main就會自動變成上面這一行。將model_a修改為如下內容:

# print('welcome to Beijing')
# name='ysj'
# print(name)
if __name__ == '__main__':print('welcome to Beijing')name='ysj'print(name)

?此時再運行model_b就不會再輸出上面的內容,它阻止了全局變量的數據被輸出,也就是說在被調用模塊的時候,需要將不希望輸出的內容放進if main結構(主程序代碼)里面。

5.Python中常用的內置模塊及random模塊中常用函數的使用

?

注意這里的隨機種子根據這個數字產生特定的數字,規定好了隨機種子不管在什么電腦上都能產生一樣的數字。如果不規定隨機種子就不能保證每一次產生的數字是一樣的,如果想要不同的數字就要規定不同的隨機種子數。

#導入
import random
#設置隨機數種子
random.seed(10)
print(random.random()) #[0.0,1.0]
print(random.random()) #這兩次結果是不一樣
print('-'*40)
random.seed(10)
print(random.randint(1,100)) #[1,100]for i in range(10): #[m,n)步長為k,m-->start-->1,n-->stop-->10,k-->step-->print(random.randrange(1,10,3)) #12行代碼執行了10次print(random.uniform(1,100)) #[a,b]隨機小數lst=[i for i in range(1,11)]
print(random.choice(lst)) #lst是列表也是序列#隨機的排序
random.shuffle(lst)
print(lst)
random.shuffle(lst) #必須寫上這行要不然就會兩行執行結果一樣了
print(lst) #此時再執行一遍

運行結果如下:

0.5714025946899135
0.4288890546751146
----------------------------------------
74
1
4
4
7
1
1
4
4
4
7
81.25126013057475
1
[5, 4, 10, 7, 3, 2, 1, 6, 8, 9]
[3, 4, 5, 6, 8, 10, 7, 1, 2, 9]進程已結束,退出代碼為 0

本節完

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

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

相關文章

LCL濾波器及其電容電流前饋有源阻尼設計軟件【LCLAD_designer】

本文主要介紹針對阮新波著《LCL型并網逆變器的控制技術》書籍 第二章(LCL濾波器設計)及第五章(LCL型并網逆變器的電容電流反饋有源阻尼設計)開發的一款交互式軟件【LCL&AD_designer】,開發平臺MATLAB_R2022b/app d…

【Conda】配置Conda鏡像源

Conda 鏡像源配置指南 適用系統:Windows 10(含 Miniconda / Anaconda) & Linux(Ubuntu / CentOS / Debian 等)1. 為什么要設置鏡像源 在中國大陸直接訪問 repo.anaconda.com 經常遇到速度慢、連接超時、SSL 錯誤等…

八股取士--docker

基礎概念類 1. 什么是Docker?它解決了什么問題? 解析: Docker是一個開源的容器化平臺,用于開發、交付和運行應用程序。 主要解決的問題: 環境一致性:解決"在我機器上能跑"的問題資源利用率&#…

C++:STL中的棧和隊列的適配器deque

學習完string類、容器vector和容器list,再去學習其他容器的學習成本就非常低,容器的使用方法都大差不差,而棧和隊列的底層使用了適配器,去模擬實現就沒有那么麻煩,適配器也是一種容器,但是這種容器兼備棧和…

9類主流數據庫 - 幫你更好地進行數據庫選型!

作者:唐叔在學習 專欄:數據庫學習 標簽:數據庫選型、MySQL、Redis、MongoDB、大數據存儲、NoSQL、數據庫優化、數據架構、AI數據庫 大家好,我是你們的老朋友唐叔!今天咱們來聊聊程序員吃飯的家伙之一 —— 數據庫。在這…

推送本地項目到Gitee遠程倉庫

文章目錄前言前面已加學習了下載gitee軟件,網址在上一篇文章。在gitee創建賬號與倉庫。現在來學習如何講本地項目推送到Gitee遠程倉庫一、流程總結前言 前面已加學習了下載gitee軟件,網址在上一篇文章。在gitee創建賬號與倉庫。現在來學習如何講本地項目…

CMake 命令行參數完全指南(5)

?**40. --version**? ?解釋?:顯示CMake版本 ?示例?: cmake --version # 輸出:cmake version 3.25.2?**41. --warn-uninitialized**? ?解釋?:警告未初始化的變量 ?適用場景?:檢測腳本錯誤 ?示例?&#xf…

基于Python實現生產者—消費者分布式消息隊列:構建高可用異步通信系統

深入剖析分布式消息隊列的核心原理與Python實現,附完整架構設計和代碼實現引言:分布式系統的通信基石在微服務架構和云原生應用普及的今天,服務間的異步通信成為系統設計的核心挑戰。當單體應用拆分為數十個微服務后,服務間通信呈…

【大模型核心技術】Agent 理論與實戰

一、基本概念 LLM 特性:擅長理解和生成文本,但采用 “一次性” 響應模式,本質上是無記憶的生成模型。Agent 本質:包含 LLM 的系統應用,具備自主規劃、工具調用和環境反饋能力,是將 LLM 從 “聊天機器人” 升…

Maven - 依賴的生命周期詳解

作者:唐叔在學習 專欄:唐叔的Java實踐 標簽:Maven依賴管理、Java項目構建、依賴傳遞性、Spring Boot依賴、Maven最佳實踐、項目構建工具、依賴沖突解決、POM文件詳解 文章目錄一、開篇二、Maven依賴生命周期2.1 依賴聲明階段:POM文…

從零打造大語言模型--處理文本數據

從零打造大語言模型 第 1 章:處理文本數據 章節導讀 在把文本投喂進 Transformer 之前,需要兩步:① 將字符流切分成離散 Token;② 把 Token 映射成連續向量。 1.1 理解詞嵌入(Word Embedding) 嵌入向量 一…

【Spring】Bean的生命周期,部分源碼解釋

文章目錄Bean 的生命周期執行流程代碼演示執行結果源碼閱讀AbstractAutowireCapableBeanFactorydoCreateBeaninitializeBeanBean 的生命周期 生命周期指的是一個對象從誕生到銷毀的整個生命過程,我們把這個過程就叫做一個對象的聲明周期 Bean 的聲明周期分為以下 …

[spring-cloud: 服務發現]-源碼解析

DiscoveryClient DiscoveryClient 接口定義了常見的服務發現操作,如獲取服務實例、獲取所有服務ID、驗證客戶端可用性等,通常用于 Eureka 或 Consul 等服務發現框架。 public interface DiscoveryClient extends Ordered {/*** Default order of the dis…

QML 基礎語法與對象模型

QML (Qt Meta-Object Language) 是一種聲明式語言,專為創建流暢的用戶界面和應用程序邏輯而設計。作為 Qt 框架的一部分,QML 提供了簡潔、直觀的語法來描述 UI 組件及其交互方式。本文將深入解析 QML 的基礎語法和對象模型。 一、QML 基礎語法 1. 基本對…

HTTPS的概念和工作過程

一.HTTPS是什么HTTPS也是一個應用層協議,是在HTTP協議的基礎上引入了一個加密層(SSL)HTTP協議內容都是按照文本的方式明文傳輸的,這就導致傳輸過程中可能出現被篡改的情況最著名的就是十多年前網絡剛發展的時期,出現“…

Unity —— Android 應用構建與發布?

文章目錄1 ?Gradle模板??:了解Gradle模板的作用及使用方法,以增強對構建流程的控制。?2 ?Gradle模板變量??:參考文檔——自定義Gradle模板文件中可用的變量列表。2.1 修改Unity應用的Gradle工程文件2.1.1 通過Gradle模板文件2.1.2 導出…

【iOS】strong和copy工作流程探尋、OC屬性關鍵字復習

文章目錄前言strong和copy的區別為什么要用copy?什么時候用什么修飾?strong(ARC自動管理)strong修飾變量的底層流程圖底層代碼核心實現小結copy底層流程圖對比與strong的關鍵不同之處內部調用關系(偽代碼)小…

程序代碼篇---多循環串口程序切換

上位機版(Python)要實現根據串口接收結果高效切換四個 while 循環函數,我們可以采用狀態機模式,配合非阻塞串口讀取來設計程序結構。這種方式可以實現快速切換,避免不必要的資源消耗。下面是一個高效的實現方案&#x…

rk3568上,實現ota,計算hash,驗證簽名,判斷激活分區,并通過dd命令,寫入對應AB分區

通過自定義升級程序&#xff0c;更直觀的理解ota升級原理。 一、模擬計算hash&#xff0c;驗證簽名&#xff0c;判斷激活分區&#xff0c;并通過dd命令&#xff0c;寫入對應分區 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <u…

數據分析—numpy庫

numpy庫NumPy 庫全面指南NumPy (Numerical Python) 是 Python 科學計算的基礎庫&#xff0c;提供了高性能的多維數組對象和工具。以下是 NumPy 的核心功能和使用方法。一、安裝與基礎1. 安裝 NumPypip install numpy2. 導入 NumPyimport numpy as np # 標準導入方式二、數組創建…