2

Pythonで、呼び出された関数mainがCやJavaのように特別な意味を持たないのはなぜですか?

プログラマーがCまたはJavaからPythonに切り替えた場合はどうなりますか。プログラミングを行うのが今の彼のスタイルであるため、彼はPythonでもCやJavaのように使い続けるべきmainですか、それとも広い意味でPythonでプログラミングを行うのはどういうわけか有害ですか?

編集:私はこの記事を読みましたが、非常に良い例で、初めてプログラマーがPythonのメインを控えるべき理由がPythonの有害なものであると述べました。

4

6 に答える 6

9

また、なぜ C と Javamainで特別な意味があるのか​​を尋ねる必要があります。これは、言語設計者の選択にすぎません。 main呼び出された可能性もありますがstartbegin誰かが選択mainしてスタックしました。

mainPython では、関数を呼び出して、それをプログラムの開始点にすることができない理由はありません。ただし、Python には、特定のファイルが と同等かどうかを識別する独自の構文がありますmain

__name__ == "__main__"

これは通常、 の一部としてラップされ、実際にプログラムを開始する関数ifの呼び出し内に単一の行を含めることができます。main

Python および多くの (すべて?) スクリプト言語の設計の一部は、コードを単純にインラインで記述できることです。すべてを関数にラップする必要はありません。そのため、多くの単純なスクリプトは関数をまったく必要としません。たとえば、ログ ファイルをローテーションする cron ジョブは、関数が定義されていない Python ファイルのコード ブロックとして記述できます。

そのシナリオでは、mainメソッドは必要ありません。

多くの点で を必要としないことでmain、特に単純なタスクの場合、言語がより柔軟になります。

補遺:

編集にコンテキストを追加するには。その記事は非常に貧弱な議論を提示しています. 実際には、同じまたは類似のことを行うモジュールが多数あるため、関数名の衝突は珍しくありません (コアではそれほど多くはありませんが、pip を使い始めるとすぐに奇妙な衝突に遭遇します)。したがって、わかりやすい関数名を使用し、from foo import *.

C++ プログラマーが一般に で名前空間を汚染するのは悪い形式だと考えるのと同じようにusing namespace std、Python プログラマーは通常、名前空間を で汚染するのは悪い形式だと考えていますimport *

最後に、プログラムで 2 つの関数を呼び出すことはほとんどありませんmain。他の場所で名前の衝突が発生する可能性がはるかに高くなります。本当の危険は、関数ではなく、ワイルドカードのインポートmainです。

于 2012-08-13T06:42:54.227 に答える
9

そのようなプログラマーはこれを行う必要があります。

if __name__ == "__main__":
    # run stuff

モジュールがインポートされていない場合、変数__name__は に設定されます。"__main__"

于 2012-08-13T06:37:40.440 に答える
6

Python には、その関数のように機能するmain()ものがあります。

if __name__ == '__main__':
  # Your main function

このifブロックのコードは、Python ファイルがモジュールとしてインポートされていない場合にのみ実行されます。

その醜いmain()関数を使用することに決めた場合、Python の同等物は次のようになります。

def main():
  # ...

if __name__ == '__main__':
  main()

とても綺麗とは思えません。

于 2012-08-13T06:38:34.387 に答える
4

Python では、.pyファイルをモジュールとして使用することも、直接実行することもできます。そのためmain、ファイルを直接実行する場合、またはファイルをモジュールとしてインポートする場合に、どの部分を実行するかを識別するために使用されます。

ファイル.py:

def func(x,y):
    print x+y

if __name__=='__main__':
    func(5,2):

直接実行すると7が出力されます

インポートすると、主要部分は実行されません。

>>> from so32 import *
>>> func(5,5)
10
>>> func(10,20)
30
于 2012-08-13T06:38:25.993 に答える
0

Python では、main と呼ばれる関数が C や Java のように特別な意味を持たないのはなぜですか?

Python は C や Java などの言語を念頭に置いて設計されていないため、実際にはメインを使用しない言語がいくつかありますhello world。おそらくすべてを実際に比較することはできませんが、すべてがメインを使用しているわけではありません...

いずれにせよ、他の人が述べているように、モジュールがインタープリターから直接実行されているかどうかをチェックすることで確認できます。メイン関数の作成方法に関する Python の作成者である Guido Van Russon からのヒントを次に示しif __name__ == '__main__':ます

プログラマーが C または Java から Python に切り替えたらどうなるでしょうか。プログラミングを行うのが現在の彼のスタイルであるため、C や Java のように Python でも main を使用し続ける必要がありますか、それとも広い意味で Python でプログラミングを行うことは何らかの形で有害なのでしょうか?

Pythonコードを書くとき、またはどんなプログラムを書くときも、常にその言語でコードが自然に見えるようにしようとします。これは、言語開発者またはコミュニティ全体によって設定された標準と慣行に従うことを意味します。またはPythonのJavaのようなコードは可能ですが、眉をひそめます。コードはエラーが発生しやすく、理解するのが非常に難しく、時には非常に遅くなる傾向があり、他の言語にも同じことが当てはまります。

これには良い参考文献がほとんどありませんPythonコーディング標準/ベストプラクティス

于 2012-08-13T07:23:56.143 に答える
0

main() を使用して個々のプロシージャ (またはメソッド) を呼び出すことが良いアイデアである理由について、YouTube の Kent D Lee による優れた説明があります。アクセスするには、あるプロシージャの変数が別のプロシージャの変数に干渉するというリスクもあります。また、main() を使用してプロシージャを呼び出すと、それらのプロシージャをインポートすることにより、別のプログラムでそれらのプロシージャを再利用できます。さらに、プログラム全体を実行せずに個々の手順をテストできます。もちろん、「hello world」を出力するだけの場合は、main メソッドを使用するメリットはまったくありません。それを行う唯一の理由は、それがどのように機能するかを調べることです。
Python が学習者にとって良いと誰もが言う理由は、すぐに簡単に作業を開始できるからです。問題は、かなり大きなプログラムを作成しようとすると、他の言語が持つすべての複雑さにすぐに直面することです。は実際には非常に重要です。

于 2012-08-19T20:23:33.273 に答える