AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

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

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

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

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

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

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

函數作為參數傳遞

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

函數作為返回值

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

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

像執行函數一樣執行對象

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

總結

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

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

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

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

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

標簽:
  • 熱門焦點
  • vivo TWS Air開箱體驗:真輕 臻好聽

    在vivo S15系列新機的發布會上,vivo的最新款真無線藍牙耳機vivo TWS Air也一同發布,本次就這款耳機新品給大家帶來一個簡單的分享。外包裝盒上,vivo TWS Air保持了vivo自家產
  • 太卷!Redmi MAX 100英寸電視便宜了:12999元買Redmi史上最大屏

    8月5日消息,從小米商城了解到,Redmi MAX 100英寸巨屏電視日前迎來官方優惠,到手價12999元,比發布價便宜了7000元,在大屏電視市場開卷。據了解,Redmi MAX 100
  • Rust中的高吞吐量流處理

    作者 | Noz編譯 | 王瑞平本篇文章主要介紹了Rust中流處理的概念、方法和優化。作者不僅介紹了流處理的基本概念以及Rust中常用的流處理庫,還使用這些庫實現了一個流處理程序
  • 使用AIGC工具提升安全工作效率

    在日常工作中,安全人員可能會涉及各種各樣的安全任務,包括但不限于:開發某些安全工具的插件,滿足自己特定的安全需求;自定義github搜索工具,快速查找所需的安全資料、漏洞poc、exp
  • 共享單車的故事講到哪了?

    來源丨??素斀浥c共享充電寶相差不多,共享單車已很久沒有被國內熱點新聞關照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發報道稱,成都、天津、鄭州等地多個共享單
  • 蘋果、三星、惠普等暫停向印度出口筆記本和平板電腦

    集微網消息,據彭博社報道,在8月3日印度突然禁止在沒有許可證的情況下向印度進口電腦/平板及顯示器等產品后,蘋果、三星電子和惠普等大公司暫停向印度
  • iQOO Neo8 Pro即將開售:到手價3099元起 安卓性能最強旗艦

    5月23日,iQOO如期舉行了新品發布會,全新的iQOO Neo8系列也正式與大家見面,包含iQOO Neo8和iQOO Neo8 Pro兩個版本,其中標準版搭載高通驍龍8+,而Pro版更
  • 蘋果MacBook Pro 2021測試:仍不支持平滑滾動

    據10月30日9to5 Mac 消息報道,蘋果新的 14 英寸和 16 英寸 MacBook Pro 2021 上市后獲得了不錯的評價,亮點包括行業領先的性能,令人印象深刻的電池續航,精美豐
  • Meta盲目擴張致超萬人被裁,重金押注元宇宙而前景未明

    圖片來源:圖蟲創意日前,Meta創始人兼CEO 馬克&middot;扎克伯發布公開信,宣布Meta計劃裁員超11000人,占其員工總數13%。他公開承認了自己的預判失誤:&ldquo;不僅
Top