PyQオフィシャルブログ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

Pythonの関数(オブジェクト) と オブジェクト.関数() の違いは何ですか?

こんにちは。

Python、ひいてはプログラミング言語全般な悩みではないかと思います。 何人かの方にご質問いただいたのでブログでも回答いたします。

Pythonの関数(オブジェクト) と オブジェクト.関数() の違いは何ですか?

これは少しヤヤコシイ問題ですね。

例えば len("文 字 列")"文 字 列" の長さを取得する関数なのに、 "文 字 列".split() は文字を空白文字で分割する メソッド (オブジェクト.関数) ですね。

基本的にはメソッドの場合は、そのオブジェクト固有の処理が多いです。 例えば "文字列".split"文字列".startswith などです。これは文字列固有です。

ですが len は文字列にも、リストにも使えます。 len("文字列") len([0, 1, 2]) なのです。こういった場合は、Pythonでは関数で用意されています。

また、printなどのように特定のオブジェクトの型に関係しない場合も関数で用意されます。


PyCon JP 2017で清水川氏の発表がこの質問と近い内容でした。あわせてご紹介します。

清水川氏の発表のスライドです。

goo.gl

動画もあります。

www.youtube.com

詳しくは、PyCon JP 2017 1日目 参加ログ #pyconjp — 清水川Webを参照ください。

PyCon JP 2017 トークの沢山の動画がYoutubeで公開されています。興味があるタイトルなどを探してみるのも秋の連休の長い夜の楽しみになりそうですね。

www.youtube.com