日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

深入理解python函數,一切皆對象

來源: 責編: 時間:2024-01-02 09:29:17 204觀看
導讀把函數賦值給變量def say(text): print(text)speak = sayspeak('hello') # hellodel saysay('hello') # NameError: name 'say' is not definedspeak('hello') # hellospeak 只是這個函數對象的另一個名字,也就是說

把函數賦值給變量

def say(text):    print(text)speak = sayspeak('hello') # hellodel saysay('hello') # NameError: name 'say' is not definedspeak('hello') # hello

speak 只是這個函數對象的另一個名字,也就是說你可以刪除原來的名字(say),仍然可以通過 speak 調用這個函數。這就像普通的變量賦值一樣。請看下圖了解。RSH28資訊網——每日最新資訊28at.com

RSH28資訊網——每日最新資訊28at.com

函數作為變量,存儲到數據結構

正如我們在第一節中了解到的,函數是 Python 中的對象,我們可以將它們存儲在數據結構中,就像任何其他對象一樣。要訪問存儲在其中的函數對象,假設列表的工作方式如下:RSH28資訊網——每日最新資訊28at.com

def say(text):    print(text)funcs = [say, str.lower, str.upper]for func in funcs:    print(func, "執行返回值:", func("Hello"))# 運行結果:# Hello# <function say at 0x7f9b880c6320> 執行返回值:None# <method 'lower' of 'str' objects> 執行返回值:hello# <method 'upper' of 'str' objects> 執行返回值:HELLO

函數作為參數傳遞

第一次聽到這個詞,你會覺得很奇怪,但是你可以確定,函數也是一個對象,可以作為參數傳遞給另一個函數。RSH28資訊網——每日最新資訊28at.com

def sayUpper(text):    print(text.upper())def sayLower(text):    print(text.lower())def speak(text, func):    func(text)speak('Hello', sayUpper) # HELLOspeak('Hello', sayLower) # hello

上面的例子我們定義了兩個函數,sayUpper 和 sayLower,然后調用 speak 函數,將他們作為參數傳遞給 speak函數。RSH28資訊網——每日最新資訊28at.com

函數作為返回值

函數可以作為返回值,這個返回值就是一個函數。RSH28資訊網——每日最新資訊28at.com

def speaker(volume):    def quiet(text):        return text.lower()    def loud(text):        return text.upper()    if volume < 20:        return quiet    else:        return louds = speaker(10)print(s('Hello')) # helloS = speaker(30)print(S('Hello')) # HELLO

上面的例子定義了一個函數 speaker,它接受一個參數 volume,如果 volume 小于 20,返回一個函數 quiet,否則返回一個函數 loud。執行 speaker 函數,我們傳入 10,它將返回一個函數 quiet,執行 speaker 函數,我們傳入 30,它將返回一個函數 loud。例子中s、S 變量都是函數,它們都是 speaker 函數的返回值。RSH28資訊網——每日最新資訊28at.com

通過上面函數的性質:可以理解 python 裝飾器的本質是一個函數,它接受一個函數作為參數,并返回一個函數。RSH28資訊網——每日最新資訊28at.com

像執行函數一樣執行對象

所有函數都是對象,但所有對象都不是函數。但是,可以將對象設置為可調用的,這允許將它們視為函數(在某些情況下)。為此,我們可以使用 __call__ 屬性。RSH28資訊網——每日最新資訊28at.com

class Subtrack:    def __init__(self, a, b):        self.a = a        self.b = b    def __call__(self, x):        return self.a - self.b - xX = Subtrack(10, 5)print(X(2)) # 3

上面的例子定義了一個類 Subtrack,它有兩個屬性a 和 b,并且定義了一個函數 __call__,它可以將對象設置為可調用的。為此,我們可以使用 __call__ 屬性。X 是 Subtrack 類的實例,因為存在__call__ 函數,它可以像函數一樣被調用。需要主要并不是所有的類都有 __call__ 屬性。RSH28資訊網——每日最新資訊28at.com

總結

通過上面的學習你是否更熟悉了 Python 的函數了?RSH28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-55027-0.html深入理解python函數,一切皆對象

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 五個VS Code技巧,開發更快更高效

下一篇: TikTok 面試:四個你可能感興趣的前端題

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 锦屏县| 无为县| 乌鲁木齐县| 博罗县| 左权县| 中山市| 泽普县| 和硕县| 陆良县| 陇西县| 南岸区| 长岭县| 佛坪县| 江陵县| 九台市| 大丰市| 平陆县| 介休市| 桐乡市| 美姑县| 灵丘县| 邹城市| 西盟| 漳浦县| 恩施市| 台北市| 大兴区| 萝北县| 铜陵市| 靖安县| 保康县| 静安区| 海口市| 甘孜县| 大荔县| 施秉县| 阳泉市| 孟津县| 滦南县| 黄大仙区| 长岛县|