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で質問しましょう!
似たような質問が見つかりました
- Ruby vscode 文字化け 1 2022/05/21 19:17
- JavaScript Cookieに保存されない 1 2023/12/26 18:45
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- PHP 記述のおかしいところを教えて下さい。 1 2023/02/03 11:25
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
chatgptでつくってもらったコードとかって頭のいい人はみるとわかりますか?
C言語・C++・C#
-
プログラミング言語の制作方法について
C言語・C++・C#
-
これなにがちがうんですか??
C言語・C++・C#
-
-
4
c言語
C言語・C++・C#
-
5
Int('1234') で、strをかんたんに整数で扱えちゃうパイソンはどうなってるんですか?
C言語・C++・C#
-
6
c言語
C言語・C++・C#
-
7
どなたかこのプログラミングを完成させて欲しいです。 ヒントはこちらです↓ 青色:ゲームプログラムのル
C言語・C++・C#
-
8
HTML入門でもう躓いてしまった。
HTML・CSS
-
9
こんなことてしますか??
C言語・C++・C#
-
10
終端記号、非終端記号とは
C言語・C++・C#
-
11
擬似コード 長さがmの配列でなんで For i =0 to m とかかくの?m-1までしかないでしょ
C言語・C++・C#
-
12
License='MIT' ってなんでmitなんですか??適当なのでもいいですか? パイソン
C言語・C++・C#
-
13
VisualStudio2022でC言語プログラムで全角文字を使用すると不明なエラーが表示される
C言語・C++・C#
-
14
これの対応OSを教えて下さい。php-8.3.0-src.zip
PHP
-
15
JRのjsonファイルって使って大丈夫そ?
その他(プログラミング・Web制作)
-
16
プログラミングについての質問です。 #include <stdio.h> #include <std
C言語・C++・C#
-
17
C言語 列挙型(enum型)変数について
C言語・C++・C#
-
18
pythonの質問です。
C言語・C++・C#
-
19
そのまま使っただけなのに・・・python
その他(プログラミング・Web制作)
-
20
c言語
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
これらは書誌情報だと思うので...
-
1、Rstudioで回帰直線を求める...
-
pandasでsqlite3にテーブル作成...
-
文字コードのエラー
-
pythonエラー
-
Accessで文字列のバイト数読み込み
-
rubyの正規表現について
-
実行時エラー450:引数の数が一...
-
再起動後必ず2つのエラーが出...
-
ビーリアルのユーザー名を変え...
-
情報の表現。()内がどうしても...
-
pythonのerrorコード
-
三項でたとえば交換って
-
WinSCPで画像のように puttyを...
-
パソコンのスクリーンセーバー...
-
こういう問題分をよんだとき
-
バーチャルボックスが使えなく...
-
なんで if __name__ == "__main__"
-
GitHubは初年度以外は有料にな...
-
ぱいソン
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
1、Rstudioで回帰直線を求める...
-
情報の表現。()内がどうしても...
-
ビーリアルのユーザー名を変え...
-
(再質問)エクセルのマクロボ...
-
C言語の入力した文字を反転させ...
-
パソコンのスクリーンセーバー...
-
pandasでsqlite3にテーブル作成...
-
教えてください
-
100万件越えCSVから条件を満た...
-
VBA メモ帳の上書き保存がしたい
-
Ruby on railsをrails sで立ち...
-
英数字を含む文字列(0-9,A-Z)...
-
クリスタルレポートで困ってい...
-
ターミナルからemacsへのコピペ...
-
Accessで文字列のバイト数読み込み
-
pythonエラー
-
VBScriptでExcel(2019)上のデー...
-
じゃんけんのプログラムを作っ...
-
WSLのUbuntuで、Railsのインス...
-
VBA
おすすめ情報