No.4ベストアンサー
- 回答日時:
> でもなんでspamのなかみそういう例にしたんですか?
元ネタはこれ。
Learn to Program:
https://pine.fm/LearnToProgram/chap_06.html
言語はRubyだけどね。
No.3
- 回答日時:
例えば次のようなプログラムを書くとする。
実装例1:
https://www.ideone.com/uhkrXk
関数を定義して、実行部があるプログラムだ。
こいつを、例えばspam.pyと名付けるとする。
んで、例えば端末で引数を付けて呼び出すとそのまま実行してくれる。
➜ ~ python3 spam.py ゆゆにゃ。
おー、輝かしい未来が見えるぞよ。
➜ ~ python3 spam.py cametan_42
汝の未来は・・・おっと待った、いま何時だ!
私は行かねばならない。失敬する!
まぁ、この通りだよな。プログラムで書いた「実行部」が実行されるわけ。
ところが、こいつを他のPythonプログラムから呼び出すとやっぱり「実行される」わけ。
例えば次のようなプログラムがあるとする。
実装例2:
https://www.ideone.com/96u0ww
最初に書いたspam.pyをimportだけしてる。こいつをspamspam.pyとでも名付けてspam.pyと同じフォルダに突っ込んでおけば、spamspam.pyを起動させただけで
➜ ~ python3 spamspam.py ゆゆにゃ。
おー、輝かしい未来が見えるぞよ。
➜ ~ python3 spamspam.py cametan_42
汝の未来は・・・おっと待った、いま何時だ!
私は行かねばならない。失敬する!
となる・・・嬉しいか?
これ、実は通常は望んだ結果じゃない。「モジュールをimportしただけでモジュールに含まれてる実行部が実行される」ってのは嬉しくないよね。「黙ってろ」とか思うだろう。
「あるモジュールをimport」したい場合って大抵は書いてる関数とかクラスに用があるんであって、「実行部分」は必要ないんだよ。
つまり、単体で端末でスクリプトとして使う場合は実行部は必要なんだけど、モジュールとしてimportしたい場合は実行部は実行されて欲しくない。
そういう、実行部分を「都合が良い処理」として書くためにif __name__ == "__main__"がある。上のspam.pyならこう記述した方がいい。
実装例3:
https://www.ideone.com/2KLDvD
こうすれば端末上でスクリプトとして呼び出せば実行部分は実行されるけど、別のプログラムが関数fooを使いたくてspam.pyをimportした場合は実行部分が実行されない。
➜ ~ python3 spam.py ゆゆにゃ。
おー、輝かしい未来が見えるぞよ。
➜ ~ python3 spam.py cametan_42
汝の未来は・・・おっと待った、いま何時だ!
私は行かねばならない。失敬する!
実行結果自体は変わんないけどね。
なお、プログラムを書いて、いちいち端末上でpythonとかpython3とかインタプリタ名をコマンドとして書くのも嬉しくないんで、通常はif __name__ == "__main__"はシェバングと組み合わせる。具体的には次のように書く。
実装例4:
https://www.ideone.com/l32mLK
シェバングで使用する言語環境を指定出来る・・・ってこれは本当はUNIX流儀なんだけど、最近のWindows版Pythonもこれが使えるようになった・・・Windowsじゃちと意味不明なんだけど、お陰さんでWindows <-> UNIXでのPythonプログラムの「変更」が一つ減ったわけ。
いずれにせよシェバングを使えば端末上で「書いたプログラム(ファイル)名」だけ与えればスクリプトが実行されるようになる。
➜ ~ ./spam.py ゆゆにゃ。
おー、輝かしい未来が見えるぞよ。
➜ ~ ./spam.py cametan_42
汝の未来は・・・おっと待った、いま何時だ!
私は行かねばならない。失敬する!
端末での「コマンド名」が書いた「プログラム名(ファイル名)」だけ、になるんで、これで立派なCLIのプログラムになりました、めでたしめでたし、と言うわけ。
わかりましたか?

にゃるほど!なんかわかりました(๑•̀ㅂ•́)و✧
すごい丁寧にかいてくれて、ありがとうございます。
でもなんでspamのなかみそういう例にしたんですか?笑 占い??
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ruby OpenURI::Meta
-
Ruby require ライブラリー
-
Accessで文字列のバイト数読み込み
-
VBScriptでExcel(2019)上のデー...
-
(再質問)エクセルのマクロボ...
-
英数字を含む文字列(0-9,A-Z)...
-
C言語の入力した文字を反転させ...
-
【メモリ不足で落ちる(python)】
-
WSLのUbuntuで、Railsのインス...
-
ruby while式
-
ruby loopメソッド 変数(再喝)
-
ruby 配列
-
ruby loopメソッド 変数
-
ruby クラス・オブジェクト・イ...
-
ルビー言語 ライブラリー 追記
-
ruby raise句
-
ruby begin句
-
ruby ensure句
-
ルビー言語 ライブラリー(再々...
-
ルビー言語 csvファイル 続き(...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Ruby require ライブラリー
-
ruby loopメソッド 変数(再喝)
-
(再質問)エクセルのマクロボ...
-
ruby OpenURI::Meta
-
ruby while式
-
ruby loopメソッド 変数
-
1、Rstudioで回帰直線を求める...
-
パソコンのスクリーンセーバー...
-
ビーリアルのユーザー名を変え...
-
ruby 配列
-
C言語の入力した文字を反転させ...
-
ruby クラス・オブジェクト・イ...
-
ルビー言語 ライブラリー 追記
-
100万件越えCSVから条件を満た...
-
ルビー言語 csvファイル 続き
-
Ruby newメソッド
-
教えてください
-
ruby raise句
-
英数字を含む文字列(0-9,A-Z)...
-
pythonエラー
おすすめ情報