欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python內(nèi)置函數(shù)之callable函數(shù)解讀

 更新時間:2025年07月02日 16:14:09   作者:alden_ygq  
這篇文章主要介紹了Python內(nèi)置函數(shù)之callable函數(shù)的使用,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

在 Python 中,callable() 是一個內(nèi)置函數(shù),用于檢查一個對象是否可調(diào)用(即是否可以像函數(shù)一樣被調(diào)用)。本文將詳細解析其用法、返回值及實戰(zhàn)案例。

1. 函數(shù)定義與基本用法

callable(object) -> bool

功能:判斷對象是否可調(diào)用。

返回值

  • True:對象可被調(diào)用(如函數(shù)、方法、類、實例等)。
  • False:對象不可被調(diào)用(如整數(shù)、字符串、列表等)。

2. 可調(diào)用對象類型

(1) 函數(shù)和方法

def add(a, b):
    return a + b

class Calculator:
    def multiply(self, a, b):
        return a * b

print(callable(add))           # 輸出: True
print(callable(Calculator().multiply))  # 輸出: True

(2) 類

類可被調(diào)用(調(diào)用時會創(chuàng)建實例):

print(callable(Calculator))    # 輸出: True
obj = Calculator()             # 類被調(diào)用,創(chuàng)建實例

(3) 實現(xiàn)__call__方法的實例

如果類定義了 __call__ 方法,則其實例可被調(diào)用:

class Adder:
    def __call__(self, a, b):
        return a + b

adder = Adder()
print(callable(adder))         # 輸出: True
print(adder(3, 4))             # 輸出: 7(實例被調(diào)用)

(4) 內(nèi)置可調(diào)用對象

如 len()print() 等:

print(callable(len))           # 輸出: True

3. 不可調(diào)用對象類型

(1) 基本數(shù)據(jù)類型

x = 42
s = "hello"
print(callable(x))             # 輸出: False
print(callable(s))             # 輸出: False

(2) 列表、字典等容器

lst = [1, 2, 3]
dct = {"a": 1}
print(callable(lst))           # 輸出: False
print(callable(dct.get))       # 輸出: True(get是方法,可調(diào)用)

(3) 模塊

import math
print(callable(math))          # 輸出: False
print(callable(math.sqrt))     # 輸出: True

4. 實戰(zhàn)案例

案例 1:函數(shù)參數(shù)驗證

確保傳入的參數(shù)是可調(diào)用對象:

def apply_function(func, x):
    if not callable(func):
        raise TypeError("func必須是可調(diào)用對象")
    return func(x)

result = apply_function(lambda x: x**2, 5)  # 正常
# apply_function(42, 5)  # 報錯:TypeError

案例 2:動態(tài)調(diào)用對象

根據(jù)條件選擇調(diào)用不同的函數(shù):

def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

operation = add if True else subtract
print(callable(operation))     # 輸出: True
print(operation(5, 3))         # 輸出: 8

案例 3:實現(xiàn)可配置的回調(diào)函數(shù)

class EventHandler:
    def __init__(self, callback=None):
        self.callback = callback if callable(callback) else lambda x: None
    
    def handle_event(self, data):
        self.callback(data)

# 使用自定義回調(diào)
def log_data(data):
    print(f"Logging: {data}")

handler = EventHandler(log_data)
handler.handle_event("Event occurred")  # 輸出: Logging: Event occurred

# 使用默認回調(diào)(無操作)
handler = EventHandler()
handler.handle_event("Silent event")    # 無輸出

案例 4:模擬函數(shù)裝飾器

在調(diào)用函數(shù)前驗證其可調(diào)用性:

def ensure_callable(func):
    if not callable(func):
        raise ValueError("傳入的不是可調(diào)用對象")
    
    def wrapper(*args, **kwargs):
        print(f"Calling {func.__name__}...")
        return func(*args, **kwargs)
    
    return wrapper

@ensure_callable
def greet(name):
    return f"Hello, {name}!"

print(greet("Alice"))  # 輸出: Calling greet... \n Hello, Alice!

5. 注意事項

callable() 返回 True 不保證調(diào)用成功:

class BadCallable:
    def __call__(self):
        raise Exception("Cannot be called")

obj = BadCallable()
print(callable(obj))  # 輸出: True
# obj()  # 報錯:Exception

Python 3.0 vs 3.2+

  • 在 Python 3.0 中,callable() 曾被移除,后在 3.2 中重新添加。
  • 若需兼容 3.0,可使用 hasattr(obj, '__call__') 替代。

6. 總結(jié)

callable() 是一個簡單但實用的工具,常用于:

  • 參數(shù)驗證:確保傳入的對象可被調(diào)用。
  • 動態(tài)編程:根據(jù)條件選擇調(diào)用不同的函數(shù)或方法。
  • 框架開發(fā):實現(xiàn)回調(diào)機制、裝飾器等功能。

通過結(jié)合 callable() 和其他 Python 特性(如高階函數(shù)、類的 __call__ 方法),可以編寫出更加靈活和健壯的代碼。

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

相關(guān)文章

  • python中正則表達式?: ?= ?! 的用法

    python中正則表達式?: ?= ?! 的用法

    正則表達式中使用的??:、?=?和??!?是三種不同的正則表達式語法,它們分別代表非捕獲組、正向前瞻斷言和負向前瞻斷言,下面就來介紹一下這三種的方法,感興趣的可以了解一下
    2025-04-04
  • python 處理數(shù)字,把大于上限的數(shù)字置零實現(xiàn)方法

    python 處理數(shù)字,把大于上限的數(shù)字置零實現(xiàn)方法

    今天小編就為大家分享一篇python 處理數(shù)字,把大于上限的數(shù)字置零實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • matplotlib.pyplot.plot()參數(shù)使用詳解

    matplotlib.pyplot.plot()參數(shù)使用詳解

    這篇文章主要介紹了matplotlib.pyplot.plot()參數(shù)詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • pytorch_pretrained_bert如何將tensorflow模型轉(zhuǎn)化為pytorch模型

    pytorch_pretrained_bert如何將tensorflow模型轉(zhuǎn)化為pytorch模型

    這篇文章主要介紹了pytorch_pretrained_bert將tensorflow模型轉(zhuǎn)化為pytorch模型的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Python制作簡單的網(wǎng)頁爬蟲

    Python制作簡單的網(wǎng)頁爬蟲

    自己寫的一個爬蟲,模仿了python核心編程書里的程序,有詳細的注釋。 是我一個理解學(xué)習(xí)的過程吧。 有需要的小伙伴可以參考下
    2015-11-11
  • python-Web-flask-視圖內(nèi)容和模板知識點西寧街

    python-Web-flask-視圖內(nèi)容和模板知識點西寧街

    在本篇文章里小編給大家分享了關(guān)于python-Web-flask-視圖內(nèi)容和模板的相關(guān)知識點內(nèi)容,有需要的朋友們參考學(xué)習(xí)下。
    2019-08-08
  • 如何利用python批量提取txt文本中所需文本并寫入excel

    如何利用python批量提取txt文本中所需文本并寫入excel

    最近幫人寫了幾個小程序,所以記錄下,下面這篇文章主要給大家介紹了關(guān)于如何利用python批量提取txt文本中所需文本并寫入excel的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • Python簡單定義與使用字典dict的方法示例

    Python簡單定義與使用字典dict的方法示例

    這篇文章主要介紹了Python簡單定義與使用字典的方法,結(jié)合簡單實例形式分析了Python字典的原理、組成、定義及使用方法,需要的朋友可以參考下
    2017-07-07
  • Python下使用Scrapy爬取網(wǎng)頁內(nèi)容的實例

    Python下使用Scrapy爬取網(wǎng)頁內(nèi)容的實例

    今天小編就為大家分享一篇Python下使用Scrapy爬取網(wǎng)頁內(nèi)容的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • python異步Web框架sanic的實現(xiàn)

    python異步Web框架sanic的實現(xiàn)

    這篇文章主要介紹了python異步Web框架sanic的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04

最新評論