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

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

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

來源: 責編: 時間:2024-01-02 09:29:17 224觀看
導讀把函數賦值給變量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 調用這個函數。這就像普通的變量賦值一樣。請看下圖了解。yeA28資訊網——每日最新資訊28at.com

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

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

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

函數作為參數傳遞

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

函數作為返回值

函數可以作為返回值,這個返回值就是一個函數。yeA28資訊網——每日最新資訊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 函數的返回值。yeA28資訊網——每日最新資訊28at.com

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

像執行函數一樣執行對象

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

總結

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

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

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

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

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

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 阜新市| 通辽市| 香港| 西盟| 抚顺市| 和林格尔县| 台东市| 泸溪县| 漳平市| 游戏| 洪泽县| 时尚| 保定市| 溆浦县| 陆川县| 甘德县| 介休市| 日照市| 韶关市| 蓬安县| 湾仔区| 正宁县| 龙里县| 务川| 聂拉木县| 赤城县| 井陉县| 宣城市| 晋江市| 松原市| 白玉县| 贺州市| 罗田县| 辉南县| 中江县| 章丘市| 沙田区| 肇东市| 都匀市| 淳安县| 沈丘县|