こんにちは。今日は「Pythonの関数(オブジェクト) と オブジェクト.関数() の違いは何ですか?」 という質問に回答します。
Python、ひいてはプログラミング言語全般な悩みではないかと思います。 何人かの方にご質問いただいたのでブログでも回答いたします。
Pythonの関数(オブジェクト) と オブジェクト.関数() の違いは何ですか?
これは少しヤヤコシイ問題ですね。
例えば len("文 字 列")
は "文 字 列"
の長さを取得する関数なのに、
"文 字 列".split()
は文字を空白文字で分割する メソッド (オブジェクト.関数
) です。
基本的にはメソッドの場合は、そのオブジェクト固有の処理が多いです。
例えば "文字列".split
や "文字列".startswith
などです。これは文字列固有です。
ですが len
は文字列にも、リストにも使えます。
len("文字列")
len([0, 1, 2])
なのです。こういった場合は、Pythonでは関数で用意されています。
また、printなどのように特定のオブジェクトの型に関係しない場合も関数で用意されます。
関連資料の紹介:PyCon JP 2017清水川氏の発表
PyCon JP 2017で清水川氏の発表がこの質問と近い内容でした。あわせてご紹介します。
発表スライド
goo.gl
発表動画
動画もあります。
発表の詳細
詳しくは、PyCon JP 2017 1日目 参加ログ #pyconjp — 清水川Webを参照ください。
PyCon JP 2017 トークの沢山の動画がYoutubeで公開されています。興味があるタイトルなどを探してみるのも秋の連休の長い夜の楽しみになりそうですね。