意味悲鳴

PythonとかUnityとか.技術ブログでしたが,研究ブログにシフトしました.

Pythonで関数を呼ぶときに()をつけないと悲惨

タイトルからして低レベル.

>>> def is_a(a):
...   return a == "a"
...
>>> is_a("a")
True
>>> is_a("b")
False
>>>
>>> is_a
<function is_a at 0x0000029DD9FE7F28>
>>>
>>> is_a and is_a
<function is_a at 0x0000029DD9FE7F28>
>>>
>>> is_a == is_a
True
>>>
>>> is_a and "a"
'a'
>>> if is_a:
...   print("True")
...
True

インタプリタの内容でも分かる通り,()をつけないとfunctionオブジェクトが返ってくる. この部分,この間違い単体では実行時にエラーが返ってこないので,コードの場所によっては本当にハマる.

ifの条件部分に変数をおいた場合の挙動についてはこの記事が参考になる.

PythonでIf文に変数を入れたときの結果 - Life with Python

この記事を見るに,functionクラスのインスタンスで中身が空(と呼べるものが存在するかわからないが)であった場合は, おそらくFalseが返ってくるのではないかと推測できる.が,ちょっと調べた限りそんなものはなさそうだし, そうだったとしても普通にエラー返してくれた方が嬉しいと思う.