Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのcallable()関数とは?オブジェクトが呼び出し可能か判定する方法

Pythonの組み込み関数 callable() は、指定したオブジェクトが「呼び出し可能(callable)」かどうかを判定するための標準ライブラリ関数です。オブジェクトが呼び出し可能であれば True を、そうでなければ False を返します。

オブジェクトが呼び出し可能であるためには、そのオブジェクトが __call__ メソッドを持っている必要があります。たとえば、単に値を代入した変数は呼び出しできませんが、定義した関数やクラスは呼び出し可能なオブジェクトになります。

呼び出し可能(Callable)なオブジェクトとは

Pythonでは、関数・メソッド・クラス、さらに __call__ メソッドを実装したクラスのインスタンスなどが呼び出し可能なオブジェクトに該当します。以下では、実際に呼び出し可能な関数を定義し、callable() 関数と実際の関数呼び出しの両方でその挙動を確認してみましょう。

サンプルコード

def func_callable():
    x = 3
    y = 5
    z = x ^ y
    return z

# 関数オブジェクトを変数に代入
res = func_callable
print(callable(res))
print(res)

# 関数を実際に呼び出して使用する
final_res = func_callable()
print(final_res)

実行結果

上記のコードを実行すると、次のような結果が出力されます。

True
<function func_callable at 0x7f8b1c2d3e50>
6

res には関数オブジェクトそのものが代入されているため、callable(res)True を返します。また、func_callable() のように括弧を付けて呼び出すことで、計算結果である 6(3 XOR 5 の演算結果)が得られます。

呼び出し不可能(Not Callable)なオブジェクト

次に、同じプログラムから関数を使わず、単純に変数だけで計算を行った場合を見てみましょう。この場合、変数の値は呼び出し可能ではないため、callable()False を返します。

サンプルコード

x = 3
y = 5
z = x ^ y
print(callable(z))
print(z)

実行結果

上記のコードを実行すると、次のような結果が出力されます。

False
6

整数値 z には __call__ メソッドが存在しないため、callable(z)False となります。ただし、値そのものは通常どおり出力され、演算結果の 6 が表示されます。

まとめ

callable() 関数を使うことで、オブジェクトが関数のように呼び出せるかどうかを実行前に安全に判定できます。特に、引数として渡されたオブジェクトがコールバック関数として利用できるかを確認したい場合などに便利です。関数・クラス・メソッド、そして __call__ を実装したインスタンスは True を返し、数値や文字列などの通常の値は False を返すという点を覚えておきましょう。

  1. 【初心者向け】Pythonのissuperset()メソッドの使い方をわかりやすく解説

    はじめにこの記事では、Pythonのissuperset()メソッドについて、基本的な仕組みから実際のコード例まで詳しく解説します。issuperset()は、セット(集合)に対して使用できるメソッドで、引数として渡されたセットのすべての要素が、呼び出し元のセットに含まれているかどうかを判定します。呼び出し元のセットBが、引数のセットAのすべての要素を含んでいる場合 → True を返すセットAの要素がすべてBに含まれていない場合 → False を返すつまり、「BがAの上位集合(スーパーセット)であるかどうか」を判定するためのメソッドです。基本構文B.issuperset(A)この式は、Bが

  2. PythonでQuine(クワイン)プログラムを書いてみよう

    「Quine(クワイン)」とは、入力を一切受け取らずに、自分自身のソースコードを出力する特殊なプログラムのことです。一見すると不思議な自己言及的な仕組みですが、実装にはいくつかの厳格なルールがあります。最も重要な条件は、プログラム内部からソースコードファイルを読み込んではいけないという点です。つまり、純粋にコード自身の論理だけで自分の内容を再現しなければなりません。 サンプルコード Pythonでは、わずか1行でQuineを実現できます。 a=a=%r;print (a%%a);print (a%a) 実行結果 a=a=%r;print (a%%a);print (a%a) ご覧のとお