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
Int('1234') で、strをかんたんに整数で扱えちゃうパイソンはどうなってるんですか?
C言語・C++・C#
-
5
c言語
C言語・C++・C#
-
6
c言語
C言語・C++・C#
-
7
どなたかこのプログラミングを完成させて欲しいです。 ヒントはこちらです↓ 青色:ゲームプログラムのル
C言語・C++・C#
-
8
HTML入門でもう躓いてしまった。
HTML・CSS
-
9
こんなことてしますか??
C言語・C++・C#
-
10
擬似コード 長さがmの配列でなんで For i =0 to m とかかくの?m-1までしかないでしょ
C言語・C++・C#
-
11
License='MIT' ってなんでmitなんですか??適当なのでもいいですか? パイソン
C言語・C++・C#
-
12
終端記号、非終端記号とは
C言語・C++・C#
-
13
VisualStudio2022でC言語プログラムで全角文字を使用すると不明なエラーが表示される
C言語・C++・C#
-
14
これの対応OSを教えて下さい。php-8.3.0-src.zip
PHP
-
15
JRのjsonファイルって使って大丈夫そ?
その他(プログラミング・Web制作)
-
16
そのまま使っただけなのに・・・python
その他(プログラミング・Web制作)
-
17
pythonの質問です。
C言語・C++・C#
-
18
C言語 列挙型(enum型)変数について
C言語・C++・C#
-
19
プログラミングについての質問です。 #include <stdio.h> #include <std
C言語・C++・C#
-
20
ホワイトハッカー
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
1、Rstudioで回帰直線を求める...
-
(再質問)エクセルのマクロボ...
-
ビーリアルのユーザー名を変え...
-
VBA
-
教えてください
-
Ruby on railsをrails sで立ち...
-
クリスタルレポートで困ってい...
-
pandasでsqlite3にテーブル作成...
-
VBScriptでExcel(2019)上のデー...
-
IDLE.Shell 3.10.0
-
VBAで人員管理表を簡単に把握し...
-
100万件越えCSVから条件を満た...
-
じゃんけんのプログラムを作っ...
-
rubyでじゃんけんのプログラム...
-
実行時エラー450:引数の数が一...
-
情報の表現。()内がどうしても...
-
pythonのerrorコード
-
三項でたとえば交換って
-
WinSCPで画像のように puttyを...
-
パソコンのスクリーンセーバー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報