最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python之Callable用法及說(shuō)明

 更新時(shí)間:2026年04月08日 08:55:28   作者:大、男人  
文章解釋了Python中的Callable,定義了可調(diào)用對(duì)象,提供了判斷方法,并詳細(xì)介紹了其在類型注解中的應(yīng)用,文章還說(shuō)明了如何讓類的實(shí)例成為可調(diào)用對(duì)象

你想了解 Python 中的 Callable,它是 Python 中用于描述可調(diào)用對(duì)象的核心概念,同時(shí)在類型注解中有明確的專用用途,下面從概念、判斷、類型注解、特殊情況四個(gè)方面全面講解:

一、核心概念:什么是 Callable(可調(diào)用對(duì)象)

Callable 直譯是“可調(diào)用的”,在 Python 中,凡是可以通過(guò) () 括號(hào)語(yǔ)法進(jìn)行調(diào)用的對(duì)象,都被稱為可調(diào)用對(duì)象(Callable)

常見的可調(diào)用對(duì)象包括:

  • 普通函數(shù)(通過(guò) def 定義)
  • 匿名函數(shù)(通過(guò) lambda 定義)
  • 類(調(diào)用類會(huì)創(chuàng)建實(shí)例,本質(zhì)是調(diào)用類的 __new__ 方法,最終返回實(shí)例對(duì)象)
  • 類的實(shí)例(滿足特定條件,后續(xù)會(huì)詳細(xì)說(shuō)明)
  • 內(nèi)置函數(shù)/方法(如 print()、len()list.append() 等)

二、如何判斷一個(gè)對(duì)象是否是可調(diào)用的?

Python 提供了兩種可靠的方式來(lái)判斷對(duì)象是否為可調(diào)用對(duì)象:

方式1:使用內(nèi)置函數(shù)callable()

這是最常用、最直觀的判斷方式,返回布爾值 True(可調(diào)用)或 False(不可調(diào)用)。

示例代碼:

# 1. 普通函數(shù)
def normal_func():
    return "普通函數(shù)"

# 2. 匿名函數(shù)
lambda_func = lambda x: x * 2

# 3. 類
class MyClass:
    pass

# 4. 普通變量(不可調(diào)用)
num = 123
string = "hello"

# 判斷各對(duì)象是否可調(diào)用
print(callable(normal_func))  # 輸出:True
print(callable(lambda_func))  # 輸出:True
print(callable(MyClass))      # 輸出:True(調(diào)用類創(chuàng)建實(shí)例)
print(callable(num))          # 輸出:False
print(callable(string))       # 輸出:False

方式2:使用typing.Callable或collections.abc.Callable進(jìn)行類型檢查

通過(guò) isinstance() 函數(shù)結(jié)合 Callable 類型,可以實(shí)現(xiàn)類型層面的判斷(更適用于類型校驗(yàn)場(chǎng)景)。

示例代碼:

from typing import Callable

def normal_func():
    return "普通函數(shù)"

lambda_func = lambda x: x * 2
num = 123

# 類型檢查
print(isinstance(normal_func, Callable))  # 輸出:True
print(isinstance(lambda_func, Callable))  # 輸出:True
print(isinstance(num, Callable))          # 輸出:False

注意:Python 3.9+ 中,collections.abc.Callable 可直接使用(無(wú)需導(dǎo)入 typing),兼容性更好。

三、typing.Callable的核心用途:類型注解

Callable 在實(shí)際開發(fā)中,最核心、最常用的場(chǎng)景是作為類型注解(Type Hinting),用于標(biāo)注“可被調(diào)用的對(duì)象”(如函數(shù)參數(shù)、函數(shù)返回值),提升代碼的可讀性和可維護(hù)性。

1. 基礎(chǔ)語(yǔ)法

標(biāo)注格式:Callable[[參數(shù)類型列表], 返回值類型]

  • 中括號(hào)內(nèi) []:填寫可調(diào)用對(duì)象的參數(shù)類型列表,無(wú)參數(shù)則寫空列表 []
  • 后面的 , 之后:填寫可調(diào)用對(duì)象的返回值類型

2. 實(shí)用示例

from typing import Callable

# 示例1:標(biāo)注函數(shù)參數(shù)為可調(diào)用對(duì)象(接收一個(gè)int,返回一個(gè)int)
def process_data(data: int, handler: Callable[[int], int]) -> int:
    """
    處理數(shù)據(jù),調(diào)用傳入的可調(diào)用對(duì)象handler處理data
    :param data: 待處理的整數(shù)數(shù)據(jù)
    :param handler: 處理函數(shù)(接收int,返回int)
    :return: 處理后的結(jié)果
    """
    return handler(data)

# 定義一個(gè)符合注解要求的函數(shù)
def double_num(x: int) -> int:
    return x * 2

# 調(diào)用測(cè)試
result = process_data(10, double_num)
print(result)  # 輸出:20

# 示例2:標(biāo)注函數(shù)返回值為可調(diào)用對(duì)象
def create_adder(add_num: int) -> Callable[[int], int]:
    """返回一個(gè)加法函數(shù)"""
    def adder(x: int) -> int:
        return x + add_num
    return adder

# 創(chuàng)建一個(gè)“加5”的函數(shù)
add_5 = create_adder(5)
print(add_5(10))  # 輸出:15

3. 簡(jiǎn)化標(biāo)注(可選)

如果不需要精確標(biāo)注參數(shù)類型,僅需標(biāo)注“這是一個(gè)可調(diào)用對(duì)象”,可以直接使用 Callable(不指定參數(shù)和返回值類型):

from typing import Callable

def func(callback: Callable) -> None:
    callback()

func(lambda: print("Hello Callable"))  # 輸出:Hello Callable

四、特殊情況:讓類的實(shí)例成為可調(diào)用對(duì)象

默認(rèn)情況下,類的實(shí)例是不可調(diào)用的,但如果在類中定義了 __call__() 特殊方法,該類的實(shí)例就會(huì)變成可調(diào)用對(duì)象,調(diào)用實(shí)例本質(zhì)上就是調(diào)用 __call__() 方法。

示例代碼:

class Counter:
    def __init__(self):
        self.count = 0  # 初始化計(jì)數(shù)器
    
    def __call__(self):
        self.count += 1  # 每次調(diào)用實(shí)例,計(jì)數(shù)器+1
        return self.count

# 創(chuàng)建類的實(shí)例
counter = Counter()

# 判斷實(shí)例是否可調(diào)用
print(callable(counter))  # 輸出:True

# 調(diào)用實(shí)例(本質(zhì)調(diào)用 __call__() 方法)
print(counter())  # 輸出:1
print(counter())  # 輸出:2
print(counter())  # 輸出:3

補(bǔ)充說(shuō)明

  • __call__() 方法可以接收參數(shù),用法和普通函數(shù)一致;
  • 這種特性常用于實(shí)現(xiàn)“有狀態(tài)的函數(shù)”(實(shí)例可以保存狀態(tài),多次調(diào)用可復(fù)用狀態(tài))。

總結(jié)

  • Callable 描述可被 () 調(diào)用的對(duì)象,常見包括函數(shù)、類、內(nèi)置方法等;
  • 判斷可調(diào)用性可用 callable() 函數(shù)或 isinstance(obj, Callable);
  • typing.Callable 核心用途是類型注解,格式為 Callable[[參數(shù)類型], 返回值類型];
  • 類實(shí)例通過(guò)實(shí)現(xiàn) __call__() 方法可成為可調(diào)用對(duì)象,調(diào)用實(shí)例即調(diào)用該方法。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python的join函數(shù)的用法及實(shí)例

    Python的join函數(shù)的用法及實(shí)例

    這篇文章主要詳細(xì)介紹了python的join函數(shù)的用法及實(shí)例,文章中有詳細(xì)的代碼講解,有一定的參考價(jià)值,需要的同學(xué)可以參考閱讀
    2023-04-04
  • Python獲取遠(yuǎn)程文件大小的函數(shù)代碼分享

    Python獲取遠(yuǎn)程文件大小的函數(shù)代碼分享

    這篇文章主要介紹了Python獲取遠(yuǎn)程文件大小的函數(shù)代碼分享,需要的朋友可以參考下
    2014-05-05
  • python迭代器自定義類的具體方法

    python迭代器自定義類的具體方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python迭代器自定義類的具體方法,對(duì)此有興趣的朋友們可以學(xué)習(xí)下。
    2021-03-03
  • 將圖片導(dǎo)入Python的turtle庫(kù)的詳細(xì)過(guò)程

    將圖片導(dǎo)入Python的turtle庫(kù)的詳細(xì)過(guò)程

    在Python編程的世界里,turtle庫(kù)以其簡(jiǎn)單易用、圖形化交互的特點(diǎn),深受初學(xué)者喜愛,隨著項(xiàng)目的復(fù)雜度增加,僅僅依靠線條和顏色來(lái)繪制圖形可能已經(jīng)不能滿足需求,于是,如何將圖片導(dǎo)入到turtle庫(kù)中成為一個(gè)備受關(guān)注的問(wèn)題,所以本文介紹了如何將圖片導(dǎo)入Python的turtle庫(kù)
    2025-05-05
  • Python中如何自定義函數(shù)

    Python中如何自定義函數(shù)

    這篇文章主要介紹了Python中如何自定義函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • python逆向之pyc反編譯的使用教程

    python逆向之pyc反編譯的使用教程

    python代碼的運(yùn)行是靠python解析器將源代碼轉(zhuǎn)換為字節(jié)碼,本文主要介紹了python逆向之pyc反編譯的使用教程,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • python實(shí)現(xiàn)在目錄中查找指定文件的方法

    python實(shí)現(xiàn)在目錄中查找指定文件的方法

    這篇文章主要介紹了python實(shí)現(xiàn)在目錄中查找指定文件的方法,通過(guò)模糊查找與精確查找兩個(gè)實(shí)例較為詳細(xì)的闡述了文件查找的方法,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-11-11
  • python 比較字典value的最大值的幾種方法

    python 比較字典value的最大值的幾種方法

    這篇文章主要介紹了python 比較字典value的最大值,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 全解析MeanShift傳統(tǒng)目標(biāo)跟蹤算法

    全解析MeanShift傳統(tǒng)目標(biāo)跟蹤算法

    meanshift算法的原理很簡(jiǎn)單,假設(shè)你有一堆點(diǎn)集,還有一個(gè)小的窗口,這個(gè)窗口可能是圓形的,現(xiàn)在你可能要移動(dòng)這個(gè)窗口到點(diǎn)集密度最大的區(qū)域當(dāng)中,這篇文章主要介紹了傳統(tǒng)目標(biāo)跟蹤——MeanShift算法,需要的朋友可以參考下
    2025-05-05
  • 簡(jiǎn)單談?wù)凱ython中的反轉(zhuǎn)字符串問(wèn)題

    簡(jiǎn)單談?wù)凱ython中的反轉(zhuǎn)字符串問(wèn)題

    本文給大家總結(jié)了5種可以實(shí)現(xiàn)python中反轉(zhuǎn)字符串的方法,非常的實(shí)用,有需要的小伙伴可以參考下
    2016-10-10

最新評(píng)論

灵宝市| 诸暨市| 四子王旗| 公安县| 东方市| 武川县| 安顺市| 台东县| 邯郸县| 阜宁县| 洪泽县| 娱乐| 孟州市| 大厂| 贞丰县| 蒙山县| 乐清市| 稷山县| 横山县| 台南县| 阳东县| 龙山县| 虎林市| 乐都县| 岳阳市| 黄梅县| 辽阳县| 黔西| 新泰市| 克山县| 道真| 郸城县| 宿松县| 瓮安县| 乌海市| 临澧县| 太白县| 封开县| 肇源县| 咸宁市| 景洪市|