靈活編碼要義:Python中一切皆對象


全文共1560字,預計學習時長7分鐘

圖源:pexels

Python是一門真正意義上面向對象的編程語言,你或許也聽過這句話:Python中一切皆對象。

而談及對象,人們通常將之引用到數據集,並稱其爲屬性,且對象具有某種預定義函數來更新這些數據或與其他對象交換數據。

但實際上,函數也是一種對象。爲什麼這樣講?往下看吧!


數據類型作爲對象

所有數據類型,如數字、字符串、列表和詞典,都是Python中的對象。可以將其外觀看作數據盒,一些盒子僅因持有int、 bool或str而變小,而一些盒子則因持有list或 dict而變大,不同之處在於,它們的大小反映出在計算機中存儲這些數據的所需內存。

圖源:unsplash

當然,盒子也可以有其他特徵,比如顏色和材質,可以將這些特徵定義爲與盒子有關的不同類型的數據

作爲對象,可以應用以下常見含義或功能:

·        可以作爲函數的返回值。

·        可以作爲傳遞給函數的參數。

·        可以賦值給一個變量。

·        可以作爲數據的一部分與其他對象相關聯。

# Assign an int to a variable              a =5                                  # Use an int asan argument in a function              defadd_two(a):                 return a +2              add_two(6)                                  # Return astring in a function              defis_even(a):                 return even if a %2==0else odd               is_even(745)                                  # A booleanvalue in a tuple              (True, 7, 8)

作爲Python對象的含義

 

上述代碼片段中你可以看到有關Python對象的這些含義的示例,比如int和string。即使不太瞭解Python編碼或任何編程語言也不難理解。

那麼爲什麼有人說函數也是Python中的對象呢?


函數作爲對象

進入正題前,我們來回顧一下什麼是函數:函數是命名代碼塊,接受零或多個輸入,並在運行某些計算後返回輸出。

圖源:daftcode

下面是一個簡單示例,闡釋了上述定義中突出顯示的關鍵組件:

# define a function named add_two                  # the functiontakes an input int as its argument        defadd_two(a):        # the function isto add 2 to the input argument           b = a +2        # the functionreturns the sum as output           return b

在上一部分中,我們提到Python數據對象具有的一些常見功能。下面的示例將向你展示函數如何提供此類功能。

將函數用作另一個函數的參數

由於函數是對象,可以將函數傳遞爲另一個函數的參數。如下所示,創建了三個函數:combine_two_numbers()、add_two_numbers()及multiply_two_numbers(),後者用於計算元組中兩個數字的和及乘積。

與通常所見函數的不同,這裏將函數add_two_numbers 和 multiply_two_numbers作爲參數傳遞,這進一步分別計算了這些數字元組的和及乘積。

 

函數作爲函數的參數

變量賦值

在以下代碼片段中,筆者創建了一個名爲greeting()的函數,並將其分配給變量say_hello,它產生的輸出與greeting()相同。

 

將函數賦值給一個變量

需要注意的一點是,greeting()和 say_hello()函數都指向內存中的同一個對象。例如,如果檢查它們的地址,都具有如下所示的相同值。如果刪除greeting()函數,名稱“greeting”將變成未定義狀態,而刪除不會影響由“sayhello”函數引用的潛在對象。

 

因此,在此有一個重要的概念,即引用函數的變量與存儲在內存中的實際對象不同。

操作函數

函數作爲返回值

 

作爲對象,Python函數可以作爲函數的有效返回值。來看看以下示例,筆者編寫了一個名爲add_number_creator()的函數,它返回一個可以向整數參數添加數字的函數。

通過調用add_number_creator()函數,創建了函數add_three()和 add_five()。這兩個函數完成預期任務,向函數調用中指定的整數添加3和5。

 

函數作爲返回值

 

函數作爲另一對象的一部分

我們也可以創建一個函數列表,使這些函數成list對象的一部分。繼上一個例子,我們使用add_number_creator()函數創建了三個函數,分別輸入整數添加0、1和2。如你所見,可以枚舉函數列表,就像通常對整數或字符串列表所做的那樣。

 

函數作爲另一對象的一部分

 

明白了吧,函數與Python中的其他對象一樣,可以將其分配給變量並在函數中使用。文中示例比較簡單,遇到複雜的情況也是一樣的道理。

利用好這一特徵,助你靈活編碼。


推薦閱讀專題

留言點贊發個朋友圈

我們一起分享AI學習與發展的乾貨

編譯組:齊鑫濛、劉露敏

相關鏈接:

https://medium.com/swlh/everything-is-an-object-in-python-learn-to-use-functions-as-objects-ace7f30e283e

如轉載,請後臺留言,遵守轉載規範

推薦文章閱讀

ACL2018論文集50篇解讀

EMNLP2017論文集28篇論文解讀

2018年AI三大頂會中國學術成果全鏈接

ACL2017論文集:34篇解讀乾貨全在這裏

10篇AAAI2017經典論文回顧

長按識別二維碼可添加關注

讀芯君愛你

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章