自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python 函數(shù)為什么會默認(rèn)返回 None?

開發(fā) 后端
Python 有一項(xiàng)默認(rèn)的做法,很多編程語言都沒有——它的所有函數(shù)都會有一個(gè)返回值,不管你有沒有寫 return 語句。

 Python 有一項(xiàng)默認(rèn)的做法,很多編程語言都沒有——它的所有函數(shù)都會有一個(gè)返回值,不管你有沒有寫 return 語句。

[[337935]]

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

 

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

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

 

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

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

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

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

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

 

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

不管有沒有寫 return,它們都會執(zhí)行 return 的邏輯,而且默認(rèn)的返回值就是 None。

那么,問題來了:Python 的函數(shù)為什么能默認(rèn)返回 None 呢?它是如何實(shí)現(xiàn)的呢?

答案就在解釋器中,當(dāng) CPython 解釋器執(zhí)行到函數(shù)的最后一個(gè)代碼塊時(shí),若發(fā)現(xiàn)沒有返回值,它就會主動地加上一個(gè) Py_None 值返回(出自:compile.c):

 

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

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

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

責(zé)任編輯:華軒 來源: Python貓
相關(guān)推薦

2020-08-21 09:44:48

Python開發(fā)工具

2021-05-30 09:25:48

HttpETag 網(wǎng)絡(luò)協(xié)議

2020-07-22 07:55:12

Python開發(fā)函數(shù)

2012-08-17 10:01:07

云計(jì)算

2020-03-30 15:05:46

Kafka消息數(shù)據(jù)

2012-03-26 10:26:43

openstackeucalyptus

2012-05-02 10:08:51

桌面Linux微軟

2021-07-09 09:24:06

NanoID UUID軟件開發(fā)

2022-04-13 20:53:15

Spring事務(wù)管理

2023-03-22 09:10:18

IT文檔語言

2014-03-05 14:58:00

蘋果CarPlayiOS

2015-12-07 10:49:43

卸載App用戶體驗(yàn)

2021-01-25 07:14:53

Cloud DevOps云計(jì)算

2022-05-11 08:22:54

IO負(fù)載NFSOS

2020-09-21 06:10:47

Python lambda匿名函數(shù)

2021-07-19 09:58:22

Pythonprint函數(shù)

2016-12-22 18:38:49

JavaAndroid

2020-06-10 14:10:53

服務(wù)開發(fā) 架構(gòu)

2020-04-25 20:20:28

蘋果庫克手機(jī)

2022-05-18 08:25:59

MySQLutf8字符集數(shù)據(jù)庫
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號