Python篇---返回類型

基礎返回類型:

在 Python 中,函數的返回類型就像函數 “產出” 的不同 “物品”,理解它們能幫你更好地控制代碼的輸出。下面用通俗的方式介紹常見的返回類型及用法:

一、最基礎的返回類型

1.?無返回值(None)
  • 特點:函數做完事情后 “啥也不遞出來”,默認返回None
  • 用法:適合只需要執行操作(如打印、修改文件)的函數
def say_hello():print("你好")  # 只打印,不返回東西result = say_hello()
print(result)  # 輸出:None
2.?單個值(數字、字符串、布爾等)
  • 特點:返回一個具體的 “單個物品”,比如數字、文字、真假值
  • 用法:用于計算結果、判斷結果等場景
# 返回數字
def add(a, b):return a + b  # 返回兩數之和print(add(2, 3))  # 輸出:5# 返回布爾值
def is_adult(age):return age >= 18  # 判斷是否成年print(is_adult(20))  # 輸出:True

二、返回多個值

  • 特點:用逗號分隔多個值,Python 會自動把它們打包成 “元組” 返回
  • 用法:需要一次性獲取多個相關結果時(比如坐標、姓名 + 年齡)
def get_user_info():name = "張三"age = 30return name, age  # 實際返回 ("張三", 30) 這個元組# 兩種接收方式
info = get_user_info()
print(info)  # 輸出:("張三", 30)name, age = get_user_info()  # 直接拆分成兩個變量
print(name)  # 輸出:張三
print(age)   # 輸出:30

三、返回容器(列表、字典、集合)

1.?列表(list)
  • 特點:返回一組有序的、可重復的數據,像 “購物清單”
  • 用法:需要返回多個同類型數據(如成績列表、名字列表)
def get_top3_scores():return [98, 95, 92]  # 返回前三名成績scores = get_top3_scores()
print(scores[0])  # 輸出:98(取第一個元素)
2.?字典(dict)
  • 特點:返回 “鍵值對” 形式的數據,像 “表格”(有標簽和對應值)
  • 用法:需要返回有明確屬性的數據(如用戶信息、商品信息)
def get_product():return {"name": "手機","price": 3999,"stock": 100}product = get_product()
print(product["price"])  # 輸出:3999(通過鍵獲取值)
3.?集合(set)
  • 特點:返回一組無序、不重復的數據,像 “去重后的列表”
  • 用法:需要返回無重復的唯一值(如去重后的標簽、關鍵詞)
def get_unique_tags():return {"Python", "編程", "Python", "學習"}  # 自動去重tags = get_unique_tags()
print(tags)  # 輸出:{'編程', 'Python', '學習'}

四、返回函數或類的實例

1.?返回函數
  • 特點:函數 “產出” 另一個函數,像 “工廠造機器”
  • 用法:需要動態生成不同功能的函數(高級用法)
def make_greeter(language):def chinese_greet():return "你好"def english_greet():return "Hello"# 根據語言返回不同函數if language == "中文":return chinese_greetelse:return english_greetgreet = make_greeter("中文")
print(greet())  # 輸出:你好(調用返回的函數)
2.?返回類的實例
  • 特點:函數 “產出” 一個類的對象,像 “工廠造產品”
  • 用法:用于創建復雜對象的 “構造函數”
class Car:def __init__(self, color):self.color = colordef create_car(color):return Car(color)  # 返回Car類的實例my_car = create_car("紅色")
print(my_car.color)  # 輸出:紅色

五、關鍵注意點

  1. 返回類型可以靈活變化:同一個函數可以根據條件返回不同類型(但不推薦,容易混亂)

    def get_data(flag):if flag:return "成功"  # 字符串else:return 0      # 數字
    
  2. return會立刻結束函數:后面的代碼不會執行

    def test():return 1print("這里不會執行")  # 永遠到不了這里
    
  3. 沒有return時默認返回None:比如單純打印內容的函數

總結

Python 的返回類型就像函數的 “輸出快遞”:

  • 簡單的結果用單個值(數字、字符串等)
  • 多個相關值用元組列表
  • 有明確屬性的用字典
  • 去重數據用集合
  • 復雜功能用函數類實例

根據你的需求選擇合適的 “包裝方式”,代碼會更清晰易懂~

特殊返回類型:

除了前面提到的基礎返回類型,Python 中還有一些更 “特殊” 的返回類型,它們通常用于特定場景,雖然不常用但非常強大。下面用通俗的方式介紹幾種:

1. 生成器(Generator)—— “一邊產生一邊用” 的序列

  • 特點:不是一次性返回所有數據,而是 “按需生成”,像 “水流” 一樣,用一點取一點,節省內存。
  • 怎么認:函數里用yield代替return,調用后返回的是生成器對象,不是直接的結果。
  • 用法:處理超大數據(比如 100 萬個數)時,避免一次性加載到內存。
def number_generator(n):for i in range(n):yield i  # 每次返回一個數,暫停在這,下次調用繼續# 調用函數得到生成器(不會立刻執行)
gen = number_generator(5)# 逐步獲取結果(每次取一個)
print(next(gen))  # 輸出:0
print(next(gen))  # 輸出:1
print(next(gen))  # 輸出:2
  • 好處:如果要生成 100 萬個數字,用列表會占大量內存,生成器則只在需要時計算,內存友好。

2. 迭代器(Iterator)—— “可遍歷的容器”

  • 特點:和生成器類似,也是 “按需返回” 數據,但更底層,是很多容器(如列表、字典)的 “遍歷引擎”。
  • 怎么來:通過iter()函數把列表、字符串等變成迭代器,或者自己定義帶__next__()方法的類。
  • 用法:用于自定義遍歷邏輯,比如按特殊規則遍歷數據。
# 把列表變成迭代器
my_list = [10, 20, 30]
it = iter(my_list)print(next(it))  # 輸出:10
print(next(it))  # 輸出:20
  • 和生成器的關系:生成器是一種特殊的迭代器,寫法更簡單。

3. 裝飾器(Decorator)返回的函數 —— “增強版函數”

  • 特點:函數返回一個 “被包裝過的新函數”,給原函數添加額外功能(如計時、權限檢查),但不修改原函數代碼。
  • 用法:用于 “增強” 函數功能,比如給多個函數統一加日志、計時。
def timer(func):  # 接收一個函數作為參數def wrapper():import timestart = time.time()func()  # 調用原函數end = time.time()print(f"耗時:{end - start}秒")return wrapper  # 返回包裝后的新函數# 用@符號應用裝飾器
@timer
def slow_function():time.sleep(1)  # 模擬耗時操作slow_function()  # 執行時會自動打印耗時
  • 效果:調用slow_function()時,不僅會執行原功能,還會自動輸出執行時間,這就是裝飾器返回的新函數在起作用。

4. 上下文管理器(Context Manager)—— “自動收尾的工具”

  • 特點:返回一個支持with語句的對象,能自動處理 “開始” 和 “結束” 操作(如打開 / 關閉文件、連接 / 斷開數據庫)。
  • 怎么認:類中定義了__enter__()(開始時執行)和__exit__()(結束時執行)方法,或用@contextmanager裝飾器。
  • 用法:替代手動關閉資源,避免忘記釋放(如文件沒關導致占用)。
# 自定義一個簡單的上下文管理器(模擬文件操作)
class MyFile:def __init__(self, filename):self.filename = filenamedef __enter__(self):self.file = open(self.filename, 'w')return self.file  # 返回操作對象def __exit__(self, *args):self.file.close()  # 自動關閉文件# 使用with語句,無需手動close()
with MyFile("test.txt") as f:f.write("Hello")  # 寫入內容,結束后自動關閉
  • 常見場景:Python 內置的open()函數返回的就是上下文管理器,所以用with open(...)很安全。

5. 異常(Exception)—— “報錯信息包”

  • 特點:函數可以返回(更準確說是 “拋出”)一個異常對象,用于傳遞錯誤信息。
  • 用法:遇到錯誤時,不再返回正常結果,而是 “扔出” 一個錯誤包,讓調用者處理。
def divide(a, b):if b == 0:# 拋出異常(相當于返回一個錯誤信息)raise ValueError("除數不能為0!")return a / btry:result = divide(5, 0)
except ValueError as e:print(e)  # 捕獲并打印錯誤信息:除數不能為0!
  • 本質:異常也是一種返回形式,只不過是 “錯誤情況下的返回”,用于中斷正常流程并傳遞問題。

總結:這些特殊返回類型的核心價值

它們本質上都是為了解決特定問題:

  • 生成器 / 迭代器 → 處理大數據,省內存
  • 裝飾器 → 增強函數功能,少寫重復代碼
  • 上下文管理器 → 自動管理資源,避免失誤
  • 異常 → 規范錯誤處理,讓代碼更健壯

這些類型雖然 “特殊”,但理解后能讓你寫出更高效、更優雅的 Python 代碼~

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

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

相關文章

ArkTS 與 TypeScript 的關系及鴻蒙開發常見錯誤案例

隨著 HarmonyOS NEXT(純血鴻蒙) 的到來,開發者在學習鴻蒙應用開發時會遇到一個新的語言 —— ArkTS。很多人會疑惑:它和 TypeScript(TS)是什么關系?又有哪些新的特性?在實際開發中&a…

初識socket編程(實現一個簡單的TCPServer)

監聽套接字的創建流程 在網絡編程中,listen 套接字(通常稱為“監聽套接字”)是服務器端用于接收客戶端連接請求的特殊套接字,是 TCP 服務器建立連接過程中的核心組件。下面我們就來簡單看一下監聽套接字創建的過程創建流程&#x…

開發者如何在 Gitee 上開源一個自己的項目

文章目錄一、為什么要在 Gitee 上開源?1. 開源的價值2. 為什么是 Gitee?二、前期準備:讓項目“可開源”1. 項目代碼整理2. 添加必要文件3. 確定開源許可證三、在 Gitee 上創建倉庫四、推送本地代碼到 Gitee五、完善項目展示(吸引力…

卷積神經網絡實現mnist手寫數字集識別案例

手寫數字識別是計算機視覺領域的“Hello World”,也是深度學習入門的經典案例。它通過訓練模型識別0-9的手寫數字圖像(如MNIST數據集),幫助我們快速掌握神經網絡的核心流程。本文將以PyTorch框架為基礎,帶你從數據加載…

實戰筆記——構建智能Agent:SpreadJS代碼助手

目錄 前言 解決思路 需求理解 MCP Server LangGraph 本教程目標 技術棧 第一部分:構建 MCP Server - 工具服務化的基礎架構 第二部分:Tools 實現 第三部分:基于 LangGraph 構建智能 Agent 第四部分:服務器和前端搭建 前…

【Word】用 Python 輕松實現 Word 文檔對比并生成可視化 HTML 報告

在日常工作和學習中,我們經常需要對兩個版本的文檔進行比對,比如合同修改、論文修訂、報告更新等。手動逐字檢查不僅耗時費力,還容易遺漏細節。 今天,我將帶你使用 Python python-docx difflib 實現一個自動化 Word 文檔對比工具…

從0開始搭建一個前端項目(vue + vite + typescript)

版本 node:v22.17.1 pnpm:v10.13.1 vue:^3.5.18 vite:^7.0.6 typescipt:~5.8.0腳手架初始化vue pnpm create vuelatest只選擇: TypeScript, JSX 3. 用vscode打開創建的項目,并刪除多余的代碼esl…

1.ImGui-環境安裝

免責聲明:內容僅供學習參考,請合法利用知識,禁止進行違法犯罪活動! 本次游戲沒法給 內容參考于:微塵網絡安全 IMGUI是一個被廣泛應用到逆向里面的,它可以用來做外部的繪制,比如登錄界面&…

基于springboot的二手車交易系統

博主介紹:java高級開發,從事互聯網行業六年,熟悉各種主流語言,精通java、python、php、爬蟲、web開發,已經做了六年的畢業設計程序開發,開發過上千套畢業設計程序,沒有什么華麗的語言&#xff0…

修改win11任務欄時間字體和小圖標顏色

1 打開運行提示框 在桌面按快捷鍵winR,然后如下圖所示輸入regedit2 查找路徑 1、在路徑處粘貼路徑計算機\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize 2、如下圖所示,雙擊打開ColorPrevalence,將里面的…

第13集 當您的USB設備不在已實測支持列表,如何讓TOS-WLink支持您的USB設備--答案Wireshark USB抓包

問:當您的USB設備不在已實測支持列表,如何讓TOS-WLink支持您的USB設備? 答案:使用Wireshark USB抓包,日志發給我 為什么要抓包: USB設備種類繁多;TOS-WLink是單片機,內存緊張&#…

[靈動微電子 MM32BIN560CN MM32SPIN0280]讀懂電機MCU之比較器

作為剛接觸微控制器的初學者,在看到MM32SPIN0280用戶手冊中“比較器”相關內容時,是不是會感到困惑?比如“5個通用比較器”“輪詢功能”“遲滯電壓”這些術語,好像都和電機控制有關,但又不知道具體怎么用。別擔心&…

? 貳 ? ? 安全架構:數字銀行安全體系規劃

👍點「贊」📌收「藏」👀關「注」💬評「論」 🔥更多文章戳👉Whoami!-CSDN博客🚀 在金融科技深度融合的背景下,信息安全已從單純的技術攻防擴展至架構、合規、流程與創新的…

布隆過濾器完全指南:從原理到實戰

布隆過濾器完全指南:從原理到實戰 摘要:本文深入解析布隆過濾器的核心原理、實現細節和實際應用,提供完整的Java實現代碼,并探討性能優化策略。適合想要深入理解概率數據結構的開發者閱讀。 前言 在大數據時代,如何快速判斷一個元素是否存在于海量數據集合中?傳統的Hash…

?嵌入式Linux學習 - 網絡服務器實現與客戶端的通信

1.單循環服務器 2.并發服務器 1. 設置socket屬性 2. 進程 ?3. 線程 3.多路IO復用模型 - 提高并發程度 1. 區別 2. IO處理模型 1. 阻塞IO模型 2. 非阻塞IO模型 3. 信號驅動IO 4. IO多路復用 3. 特點 4. 函數接口 1. select 2. poll 3. epoll 半包 1.單循環服務…

Mybatis中緩存機制的理解以及優缺點

文章目錄一、MyBatis 緩存機制詳解1. 一級緩存(Local Cache)2. 二級緩存(Global Cache)3. 緩存執行順序二、MyBatis 緩存的優點三、MyBatis 緩存的缺點四、適用場景與最佳實踐總結MyBatis 提供了完善的緩存機制,用于減…

Rust 登堂 之 類型轉換(三)

Rust 是類型安全的語言,因此在Rust 中做類型轉換不是一件簡單的事,這一章節,我們將對Rust 中的類型轉換進行詳盡講解。 高能預警,本章節有些難,可以考慮學了進階后回頭再看 as 轉換 先來看一段代碼 fn main() {let a…

【MySQL 為什么默認會給 id 建索引? MySQL 主鍵索引 = 聚簇索引?】

MySQL 索引 MySQL 為什么默認會給 id 建索引? & MySQL 主鍵索引 聚簇索引? 結論:在 MySQL (InnoDB) 中,主鍵索引是自動創建的聚簇索引,不需要刪除,其他索引是補充優化。 1. MySQL 的id 索引是怎么來的…

[光學原理與應用-321]:皮秒深紫外激光器產品不同階段使用的工具軟件、對應的輸出文件

在皮秒深紫外激光器的開發過程中,不同階段使用的工具軟件及其對應的輸出文件如下:一、設計階段工具軟件:Zemax OpticStudio:用于光學系統的初步設計和仿真,包括光線追跡、像差分析、優化設計等。MATLAB:用于…

openEuler常用操作指令

openEuler常用操作指令 一、前言 1.簡介 openEuler是由開放原子開源基金會孵化的全場景開源操作系統項目,面向數字基礎設施四大核心場景(服務器、云計算、邊緣計算、嵌入式),全面支持ARM、x86、RISC-V、loongArch、PowerPC、SW…