Python callable() 関数

Python3 内置函数Python3 組み込み関数


callable()これは、オブジェクトが呼び出し可能かどうかを確認するためのPythonの組み込み関数です。

Pythonでは、関数、メソッド、クラスなどはすべて呼び出し可能なオブジェクトです。callable()呼び出し前にオブジェクトが呼び出し可能かどうかを確認し、実行時エラーを回避するのに役立ちます。

単語の意味: callable 意为"可调用的",表示对象是否可以像函数一样被调用。


基本構文とパラメータ

構文形式

callable(object)

パラメータの説明

  • パラメータ object:
    • 型:任意のオブジェクト
    • 説明:確認するオブジェクト。

関数の説明

  • 戻り値:ブール値を返しますTrue 或 False。
  • 注意:Trueを返しても呼び出しが必ず成功するわけではなく、オブジェクトが呼び出し可能であることを示すだけです。

例

例1:さまざまなオブジェクトの確認

例

# 関数
def my_func():
    pass

print(callable(my_func))  # 出力: True

# メソッド
class MyClass:
    def my_method(self):
        pass

obj = MyClass()
print(callable(obj.my_method))  # 出力: True

# クラス(クラスは呼び出してインスタンスを作成できます)
print(callable(MyClass))  # 出力: True

# 組み込み関数
print(callable(len))   # 出力: True
print(callable(print))  # 出力: True

# 文字列(呼び出し不可)
print(callable("hello"))  # 出力: False

# 数値(呼び出し不可)
print(callable(123))  # 出力: False

# Lambda 式
my_lambda = lambda x: x * 2
print(callable(my_lambda))  # 出力: True

実行結果の予想:

True
True
True
True
True
False
False
True

コード解析:

  1. 関数、メソッド、クラス、lambda 式はすべて呼び出し可能です。
  2. 文字列、数値などの基本型は呼び出し不可です。

例2:実際の応用

例

# 安全に関数を呼び出す
def safe_call(obj, *args, **kwargs):
    if callable(obj):
        return obj(*args, **kwargs)
    else:
        return f"{obj} は呼び出し不可"

# テスト
def greet(name):
    return f"Hello, {name}!"

print(safe_call(greet, "Tom"))  # 出力: Hello, Tom!
print(safe_call("not a function"))  # 出力: not a function は呼び出し不可

# API 設計での使用
class EventHandler:
    def __init__(self):
        self.handlers = {}

    def register(self, event, handler):
        if not callable(handler):
            raise TypeError("handler は呼び出し可能である必要があります")
        self.handlers[event] = handler

    def trigger(self, event, *args):
        if event in self.handlers:
            return self.handlers[event](*args)

handler = EventHandler()
handler.register("click", lambda: "クリック処理")
print(handler.trigger("click"))  # 出力: クリック処理

# 呼び出し不可のオブジェクトを登録するとエラーになります
# handler.register("error", "not callable") # TypeError がスローされます

実行結果の予想:

Hello, Tom!
not a function 不可调用
处理点击

callable()関数を動的に呼び出したり、コールバック関数を検証したりする場合に非常に便利です。


Python3 内置函数Python3 組み込み関数


その他の拡張