国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python 函數默認返回None的原因

如意 ? 來源:博學園 ? 作者:吾非魚 ? 2020-08-21 10:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Python 函數默認返回None是什么原因?定義的函數沒有返回值,Python 解釋器就會強行地默認給注入一段返回邏輯!實際上 Python 中有很多行為都是隱性的。

Python 有一項默認的做法,很多編程語言都沒有,所有函數都會有一個返回值,不管有沒有寫 return 語句。

在正式開始之前,用pass語句 和 …對象 作為例子,看下 Python 的函數返回值:

Python 函數默認返回None的原因

定義的兩個函數都沒有寫任何的 return 語句,但是在函數調用后,都能取到一個返回值。執行效果跟直接寫 return 語句相比,是完全相同的:

Python 函數默認返回None的原因

這 4 個例子屬于兩種類型:一種沒有寫 return,但是都有隱藏的 return 返回值;一種寫了 return,而且實際也有返回值。也就是說,后者在語義和行為上表現一致,前者雖然在語義上缺失,但是卻有實際的行為和結果;后者的行為是顯性的,前者卻是隱性的。

《Python之禪》中有一句“顯性勝于隱性(Explicit is better than implicit)”,但是,出于簡潔和便利的考慮(Simple is better than complex),實際上 Python 中有很多行為都是隱性的,會把一些在語法層面的事交給解釋器去完成。

真值判斷 是隱性的行為,本文前兩個例子也是如此。

使用dis查看字節碼,就可以看到其背后的變化:

Python 函數默認返回None的原因

在這個對比圖中,可以看出上述 4 個函數的解釋器指令一模一樣!

不管有沒有寫 return,它們都會執行 return 的邏輯,而且默認的返回值就是 None。

那么問題來了:Python 的函數為什么能默認返回 None ?如何實現的?

答案就在解釋器中,當 CPython 解釋器執行到函數的最后一個代碼塊時,若發現沒有返回值,它就會主動地加上一個 Py_None 值返回:

Python 函數默認返回None的原因

如果定義的函數沒有返回值,Python 解釋器就會(強行地)默認給我們注入一段返回邏輯!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 源代碼
    +關注

    關注

    96

    文章

    2953

    瀏覽量

    70299
  • python
    +關注

    關注

    57

    文章

    4876

    瀏覽量

    90022
  • 解釋器
    +關注

    關注

    0

    文章

    103

    瀏覽量

    6991
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    MCU的系統時鐘從默認的8MHz改為48MHz后,程序跑飛,不能調試是什么原因

    MCU的系統時鐘從默認的8MHz改為48MHz后,程序跑飛,不能調試是什么原因
    發表于 01-27 08:05

    函數指針介紹

    這種函數應該都很熟悉,其實就是一個函數,然后返回值是一個 int 類型,是一個數值 int *fun(int x,int y); 這和上面那個函數唯一的區別就是在
    發表于 01-21 08:11

    如何用好 C 語言函數返回值?

    myopen(),用于打開某個文件,那么,這個函數要么能夠成功打開文件,要么打開文件失敗,這時,可以通過返回值區分“成功”和“失敗”。 當然,myopen() 函數失敗的原因可能很多
    發表于 12-25 07:17

    沒有專利的opencv-python 版本

    GUI 依賴,且默認禁用 nonfree 專利模塊),版本需與核心版一致: # 先安裝核心版,再安裝配套 contrib 無頭版(避免專利風險) pip install opencv-python
    發表于 12-13 12:37

    函數指針及指針函數的區別

    指針的函數,即本質是一個函數函數返回類型是某一類型的指針   類型標識符 *函數名(參數表)   int *f(x,y);   首先它是一
    發表于 12-12 06:34

    函數指針的概念

    函數返回值類型 (* 指針變量名) (函數參數列表); “函數返回值類型”表示該指針變量可以指向具有什么
    發表于 12-11 08:10

    使用setjmp及longjmp函數處理異常

    是一個用于傳遞跳轉原因的整數值,它不能為0。setjmp函數用于設置跳轉點,并返回0;longjmp函數用于跳轉到跳轉點,并使setjmp函數
    發表于 12-11 08:00

    檢查函數返回值的錯誤和異常處理方法

    檢查函數返回值:這是最常見也最基本的錯誤處理和異常處理方法,就是在調用一個函數后,檢查其返回值是否符合預期或是否表示出錯或失敗。如果出錯或失敗,則根據
    發表于 12-11 06:48

    飛凌嵌入式ElfBoard-文件I/O的了解探究之返回錯誤處理與相關函數

    errno僅返回數值,還需查閱錯誤宏定義才能知道具體錯誤原因,由此引入以下兩個標準c庫函數。perror用于在發生系統調用錯誤時輸出有關錯誤信息的描述。當一個系統調用或庫函數發生錯誤時
    發表于 11-21 08:50

    termux如何搭建python游戲

    模擬器,支持通過APT包管理器安裝軟件。搭建Python游戲開發環境前需完成以下基礎配置: 1. 更換國內源 為提升下載速度,需替換Termux默認源為清華源,執行以下命令: ```bash
    發表于 08-29 07:06

    調用Cy_ReadFuseByte()函數返回0xF0000005是怎么回事?

    。 當我們調用 Cy_ReadFuseByte() 函數時,返回的是 0xF0000005(熔斷 eFuse 的軟件流程中的第 5 步) 遵循架構參考手冊和數據表: “在過渡到安全或帶調試的安全
    發表于 07-24 07:08

    itop-3568開發板機器視覺opencv開發手冊-圖像繪制-畫線

    函數功能: 繪制一條直線。 函數原型: cv2.line(img,pt1,pt2,color,thickness=None,lineType=None,shift=
    發表于 06-04 10:38

    HarmonyOS5云服務技術分享--云函數創建配置指南

    。HarmonyOS的AGC平臺提供靈活配置,支持Node.js、Python、Java等多種語言,還能自定義運行環境哦! ?? 二、手把手創建第一個云函數 ??Step 1:進入云函數控制臺?? 登錄
    發表于 05-22 17:08

    S32K144使用MCAL配置MCU時鐘時,調用Mcu_GetPLlStatus()函數沒有返回PLL_LOCKED信號的原因

    當我使用 MCAL 配置 MCU 時鐘時,調用 Mcu_GetPLlStatus () 函數沒有返回 PLL_LOCKED 信號。我發現在這個 MCU_initClock() 函數中沒有正確設置
    發表于 04-11 07:26

    使用STM32L476RCT6 HAL_FLASHEx_Erase()函數,擦除失敗的原因

    MCU型號: STM32L476RCT6 大家有用過 HAL_FLASHEx_Erase() 這個函數嗎? 我根據官方例程寫的代碼,讀寫都能成功,但是擦除失敗。調用擦除函數
    發表于 03-10 06:14