精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

科普:Python函數默認返回 None 的原因

如意 ? 來源:Python貓 ? 作者:豌豆花下貓 ? 2020-08-17 11:39 ? 次閱讀

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

本文出自“Python為什么”系列,在正式開始之前,我們就用之前討論過的 pass語句 和 …對象 作為例子,看看 Python 的函數是怎樣“無中生有”的:

可以看出,我們定義的兩個函數都沒有寫任何的 return 語句,但是在函數調用后,都能取到一個返回值。

它們的執行效果跟直接寫 return 語句相比,是完全相同的:

這 4 個例子屬于兩種類型:一種沒有寫 return,但是都有隱藏的 return 返回值;一種寫了 return,而且實際也有返回值。

也就是說,后者在語義和行為上表現一致,前者雖然在語義上缺失,但是卻有實際的行為和結果;后者的行為是顯性的,前者卻是隱性的。

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

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

使用dis查看字節碼,就可以看到其背后的小動作:

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

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

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

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

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

對于解釋器的這種附贈的服務,大家是覺得很貼心,還是嫌棄它多事呢?

這樣的做法似乎沒多少好處,但似乎也沒有壞處。

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

    關注

    88

    文章

    3592

    瀏覽量

    93596
  • python
    +關注

    關注

    56

    文章

    4782

    瀏覽量

    84453
  • 解釋器
    +關注

    關注

    0

    文章

    103

    瀏覽量

    6495
收藏 人收藏

    評論

    相關推薦

    Python常用函數大全

    Python 世界里,有一些寶藏函數和模塊,它們可以讓你編程更輕松、代碼更高效。這篇文章將帶你一一認識這些神器,讓你的開發生活瞬間輕松不少!
    的頭像 發表于 10-27 17:20 ?176次閱讀

    從TCP偵察回函數返回錯誤代碼是什么意思?

    嗨,我想知道從TCP偵察回函數返回錯誤代碼是什么意思。它有時會得到錯誤代碼(-11)或錯誤代碼(-9)。我想這就是我無法連接到TCP服務器的原因。非常感謝。
    發表于 07-11 07:49

    STM32H7在USBH_Get_DevDesc()函數一直返回失敗的原因

    在USBH_Get_DevDesc()函數一直返回失敗,可以正常識別U盤的插入和移除,什么原因
    發表于 03-11 06:55

    函數發生器的作用,概念要點是什么

    概念。 理解迭代器和可迭代對象: 在深入探討函數生成器之前,我們需要先了解迭代器和可迭代對象的概念。在Python中,迭代是一種訪問集合元素的方式,無論集合的大小如何。迭代器是一個可以記住遍歷位置的對象。可迭代對象是可以返回
    的頭像 發表于 02-23 16:01 ?510次閱讀

    python中open函數的用法詳解

    python中open函數的用法詳解 Python中的open()函數用于打開文件。它接受文件名和模式作為參數,并返回一個文件對象。文件對象
    的頭像 發表于 01-30 15:31 ?1949次閱讀

    round函數公式怎么輸入

    , ndigits) 參數說明: number:要進行四舍五入的數字。 ndigits:指定保留的小數位數。這是一個可選參數,默認為0。 根據ndigits的不同取值,round函數的行為略有不同: 當ndigits為0時,round
    的頭像 發表于 01-15 17:27 ?895次閱讀

    split在python中的用法

    split在python中的用法 split()是Python中一個非常常用的字符串函數,它能夠根據指定的分隔符將一個字符串分割成多個子字符串,并返回一個包含這些子字符串的列表。本文將
    的頭像 發表于 12-25 15:12 ?1968次閱讀

    if函數三個條件怎么填

    IF函數是Excel中最常用的函數之一,它根據一個邏輯條件的返回結果來決定應該執行哪一個動作。在Excel中使用IF函數可以實現復雜的邏輯判斷,應用范圍廣泛。本文將詳細解析IF
    的頭像 發表于 12-03 10:28 ?3449次閱讀

    vlookup函數顯示公式不顯示結果

    VLOOKUP函數是Excel中非常常用的一種函數,用于在一個數據范圍內查找某個值,并返回相應的結果。但有時候,在使用VLOOKUP函數時會遇到公式不顯示結果的問題。本文將為您詳細解釋
    的頭像 發表于 12-01 11:22 ?2.2w次閱讀

    vlookup函數無效的原因

    vlookup 函數無效可能有以下幾個原因: 數據類型不匹配:vlookup 函數要求查找值和數據表中的對應值必須為相同的數據類型。例如,如果查找值為文本類型,但數據表中的對應值為數值類型
    的頭像 發表于 12-01 11:20 ?1.8w次閱讀

    XLOOKUP函數怎么使用

    XLOOKUP函數是Excel 365版本中新增的一項非常強大的查找和引用函數。它可以用于查找表格中的值,并返回相關信息。本文將介紹XLOOKUP函數的使用方法以及其在實際工作中的應用
    的頭像 發表于 12-01 10:54 ?2158次閱讀

    input函數會將接收的數據以什么類型返回

    nput函數會將接收的數據以字符串類型返回。 input函數Python內置函數之一,它用于從用戶處獲取輸入。當程序運行到input
    的頭像 發表于 11-30 10:09 ?3218次閱讀

    python中計算排列組合的函數有哪些

    Python中,有多種可以用于計算排列組合的函數和模塊。下面將詳細介紹一些常用的函數和模塊,并提供詳實和細致的說明。 math模塊: Python的math模塊提供了一些計算排列組合
    的頭像 發表于 11-29 16:33 ?3472次閱讀

    查看python安裝路徑的方法

    。 方法一:使用Python自帶安裝程序的默認路徑 Python的安裝程序通常會將Python解釋器安裝在默認的路徑中
    的頭像 發表于 11-29 14:54 ?1.1w次閱讀

    不屬于python的內置函數

    Python是一種高級編程語言,它提供了許多內置函數,可以幫助開發人員更輕松地處理各種任務。但是,在Python中并非所有的函數都是內置函數
    的頭像 發表于 11-29 14:27 ?1390次閱讀