Python callable() 関数
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
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
コード解析:
- 関数、メソッド、クラス、lambda 式はすべて呼び出し可能です。
- 文字列、数値などの基本型は呼び出し不可です。
例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 がスローされます
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 組み込み関数