今回のお題
今回はpythonのcallable関数についてまとめます。
関数自体はそこまでややこしいものではないのですが、疑問に思った箇所を自分で実験して調べたので記念に残しておきます。
目次
- 関数の概要
- 呼び出し方の注意点
関数の概要
callable関数は、引数にとった関数やクラスが呼び出し可能かどうかをTrue or Falseで返します。
以下、簡単な呼び出し例です。
def divide(a, b):
return (a / b)
class Test:
pass
print(callable(sum))
# 出力:true
# 組み込み関数は呼び出し可能
print(callable(hoge))
# 出力:false
# 未定義の関数は呼び出し不可
print(callable(divide))
# 出力:true
# 定義済みの関数もOK
print(callable(Test))
# 出力:true
# 定義済みのクラスもOK
print(callable(Fuga))
# 出力:false
# 未定義のクラスは呼び出し不可
基本的にメソッドやクラスには引数は設定しません。
また、pythonの世界では関数やクラスを変数の中に格納することができるので、その状態でcallable関数に渡すこともできます。
def divide(a, b):
return (a / b)
class Test:
pass
v = divide
w = "divide"
x = Test
y = "Test"
print(callable(v)) # true
print(callable(w)) # false: 関数として代入する場合は""をつけない
print(callable(x)) # true
print(callable(y)) # false: クラスとして代入する場合は""をつけない
呼び出し時の注意点
基本的な使い方は上記の通りです。
ここからはcallable関数を使う上でのNGパターンをいくつか紹介します。
なお、書籍や公式ドキュメントからは情報が見つけられなかったため、基本的には自分で実験して得た結果になります。
その点はご了承ください。
def divide(a, b):
return(a / b)
class Test:
def __init__(self, name):
self.name = name
class Sample:
pass
print(callable(divide(1, 3))) # 関数に引数をつけた場合はfalseになる
print(callable(divide("a", "b"))) # エラーが出るような引数を設定するとfalseが返らずにプログラム自体が止まる(通常のエラーと同じ)。
print(callable(Test("John"))) # クラスに引数をつけて呼び出した場合もfalseになる
print(callable(Sample("John"))) # 引数を取れないクラスに引数を渡した場合もプログラムが止まる。
終わりに
以上でcallable関数の解説を終わります。
ロジックは簡単ですが、呼び出し方に注意したいですね。