Pythonとは

Pythonとは、様々な環境で動作するスクリプト言語です。公式の紹介文を引用すれば、

Python is a programming language that lets you work quickly and integrate systems more effectively.

Welcome to Python.org (Python公式ページ)

と、素早く仕事をこなし、効率的にシステムを統合することのできるプログラミング言語だということです。

以下のような特徴を挙げられます。他にもあると思いますが、いま頭に浮かんだものだけを挙げています。

  • コードをモジュール化しやすいので、管理コストが抑えられる。
  • コードブロックをインデントで区切るので、個人的な感覚に左右されるが、コードが見やすい。
  • ダックタイピングをベースとした、オブジェクト指向のプログラミング言語。

これまで、あえてPythonを避けてきたのですが、昨今のAIブームでPythonの利用が激増していること、多くの環境に処理系が提供されていること(事務所で使っているSynology NASではRubyやGoの処理系は公式パッケージとして提供されていませんがPythonやPHPは提供されています)などから、避けて通れなくなってきました。

どうしてもSynology NAS上で実現しなければならない機能が出てきてしまったので、仕方なく(?)、Pythonでコードを書き始めています。

ここには、その中でハマってしまったことを書いていきます。誰かの役に立てば幸いです。

呼び出しで括弧を忘れる

辞書からキーの一覧を呼び出すメソッドを書いたとき、ハマりました。

def dirs_incorrect(self):
    return self.files_dict.keys    # 誤り。keysメソッドそのものが返される。

def dirs_correct(self):
    return self.files_dict.keys()  # 正解。keysメソッドの実行結果が返される。

Rubyは、メソッド呼び出しにおいて、括弧を省略することができます。そのため、括弧があってもなくても、メソッドが呼び出されて、式はその結果を表すことになります。一方、Pythonでは、括弧を省略した場合はプロパティの値を示すため、式はメソッドそのものを示すことになります。

def dirs_1
    self.files_map.keys    # keysメソッドの実行結果が返される。
end

def dirs_2
    self.files_map.keys()  # keysメソッドの実行結果が返される。
end

初めはデバッガを使って代入した変数の内容を見ても、どこに問題があったのか気付きませんでした。Ruby的な感覚が残っていたのでしょう。