※当サイトの記事には、広告・プロモーションが含まれます。

Pythonでmainメソッドはプログラムのエントリーポイントではないので必須ではないらしいが...

gigazine.net

www.itmedia.co.jp

⇧ 現状、「心電図」で「個人識別」できる精度が100%に到達してるのか気になりますな...

iPhone」の「ロック解除」ぐらいであれば、精度が100%でなくても十分ということなんですかね?

Javaにおけるmainメソッドはプログラムのエントリポイント

ネットの情報によると、

stackoverflow.com

⇧ mainメソッドがトリガーで、Javaのプログラムは実行されますと。

Oracleの公式のブログでも、

When you compile this piece of code and run it, the JVM correctly determines the entry point into the program and starts running the main method of class A. However, the JVM doesn’t load all imported classes or even referred-to classes eagerly—that is, right away. In particular, this means that only when the JVM encounters the bytecode instructions for the new B() statement will it try to locate and load class B.

https://blogs.oracle.com/javamagazine/post/how-the-jvm-locates-loads-and-runs-libraries

⇧ mainメソッドがエントリーポイントであると。

実際には、「.java」ファイルをコンパイル後の「.class」ファイルが「Class Loader」で読み込まれていくと。

⇧ 上図のようなイメージですかね。

何が言いたいかというと、Javaのプログラムは、「Java仮想マシンJVMJava Virtual Machine)」上で動作し、mainメソッドが必要であると。

Pythonでmainメソッドはプログラムのエントリーポイントではないので必須ではないらしいが...

で、本題。

Pythonでは、mainメソッドのようなエントリーポイントが必要なのか?

note.nkmk.me

PythonではC言語のようにmain()関数から処理が実行されるというわけではなく、mainという名前の関数を定義したからといって自動的にその関数から処理が始まるわけではない。

Pythonのif __name__ == '__main__'の意味と使い方 | note.nkmk.me

⇧ 上記サイト様によりますと、Pythonには、Javaにおけるmainメソッドのようなエントリーポイントのような概念が無いとのこと。

Python用のWebフレームワークである「FastAPI」のドキュメントを確認してみたところ、

fastapi.tiangolo.com

⇧ mainメソッドとか無くても動作するらしい。

上記だと、開発用のアプリケーションサーバーが8000番ポートを開放しているので、HTTPリクエストを受け付けるメソッドが用意されていれば、処理されると。

ただ、router(JavaのSpring Web MVCとかだとController乃至はRestControllerに該当すると思われる)部分については、

liquids.dev

⇧ 利用者が分割してあげる必要があると。

で、話が脱線しましたが、Pythonにおいては、mainメソッドはエントリーポイント的な役割を担うわけでは無いですと。

このあたりの思想が、Javaなどと大分異なるので、Javaのような仕組みのプログラミング言語に慣れしたんで来た身としては、かなり戸惑う部分なのだが、このあたりって気にしないもんなんですかね?

自分は、相当、違和感を感じてしまったのだけど...

で、Javaにおけるmainメソッドのような役割を担ってはいないのだけど、

www.lifewithpython.com

⇧ 上記サイト様によりますと、別の役割として、mainメソッドは利用していくのが良さそうですと。

ただ、

rurukblog.com

⇧ 上記サイト様のように、メソッドの分割が主目的であるなら、mainメソッドである必要は無い気がするんだが、どうなんだろうか?

まぁ、どのファイルを実行の起点とするか分かりやすいように、ファイル名としては、「main.py」みたいな名前にしておく方が良さそうってことですかね?

何にせよ、Pythonでメソッドの分割をどう実現すれば良いかの情報が驚くほど少ないんだけど、メソッドの粒度とか気にしないのかな?

1つのメソッドで10000万行とかあったら、メソッドを分割したいと思うのが人情だと思うのだけど、別のメソッドに処理を委譲するって考えがPythonでは無いのかね?

それにしても、

qiita.com

⇧ 上記サイト様の説明にもありますが、Pythonの「アンダースコア(_)」が何かと特殊な意味合いを持ってるっぽいので注意ですかね...

Pythonで「アンダースコア(_)」を2つ続けた

  • 特殊属性(special attribute)
  • 特殊メソッド(special method)

などは、

docs.python.org

⇧ 上記のドキュメントのページで検索でヒットするのだけど、Python特有のルールの検索の仕方が分からん...

何やら、

qiita.com

Dunderとは

__init__ のようにアンダースコア2つに囲まれている関数のことを Dunder(Double underscore) と呼ぶ。
Special methods(特殊メソッド) 、 Magic methods ともいわれる。

【Python中・上級者向け】Dunderとは? #Python - Qiita

⇧ 上記サイト様によりますと、「Dunder(Double underscore)」とも呼ばれることがあるそうな、いや、知らんがな...

毎度モヤモヤ感が半端ない…

今回はこのへんで。