重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

プログラミング初心者です
pythonの勉強をしています。
英語で書かれた本で勉強しているため、時々わからないことがあります。
関数についての項目にはいったところで、main():の意味や、用途がよくわかりません。
ネットで調べてもC言語などを使った説明が多く、よくわかりませんでした。
関数の引数、戻り地を勉強したばかりの初心者にもわかるように、説明していただけないでしょうか。
大雑把な質問になり申し訳ございませんが、よろしくおねがいします。

A 回答 (2件)

> main():の意味や、用途がよくわかりません。



これだけだと、mainという関数があるということしかわからないので、プログラム全体としてどの様な登場のしかたをしているかをご提示いただいた方が良かったかもしれません。

既に回答がありますように、pythonではmainという名前の関数は特別な意味を持ちません。
でも、他の言語の中には、ここからプログラムの実行を開始しますよという意味でかならず書かなければいけないものもあります。
そういう書き方に慣れた人には、最初に実行する処理をmainという名前の関数にした方がわかり易いのかもしれませんね。
例えば以下の様な書き方をしたプログラムを見たことがあります。

-----
#その他の関数
def other():
  #その他の関数の処理を記述

#main関数
def main():
  #main関数の処理を記述
  #その他の関数を呼び出したりもする

#main関数の実行(プログラムの最後に書く)
main()
-----
    • good
    • 0

んー、基本的にPythonの場合、特にmain関数要らない筈ですがねぇ。



基本的に、貴方が調べた通り、C言語なんかではmain関数は「必ず書かないとならない」ですが。
一応ザックリ解説しておきますが、元々、機械語/アセンブリレベルだと必ず「主プログラム」の部分が必要で、その部分のメモリ上の開始地点(これをエントリポイントと呼びます)を、慣用的に「main」と言うわけです(これは当然'main'と言う名前に「しなければならなかった」わけではなくって、アセンブリ言語作成上での「慣習」です)。
C言語なんかはかなり低レベルなんで、アセンブリでの「習慣」を引き摺った言語設計になっていますが、Pythonみたいな「より」高級言語ですと、別にどの関数がどの関数を呼び出そうとあっちゃらけのけー、なワケで、「mainと名付けた関数を作らないとならない」わけではないです。もちろんmainと言う関数を作っても良いですが、C言語等と違って「強制ではありません」。
どの本がそんな説明してたんでしょうか?

一方、Pythonでスクリプト言語的な使い方をする場合、要するに「端末から呼び出すアプリケーション」を書く場合ですね、次のような書式をファイルの最後に書いたりします。

if '__name__' == '__main__':
  # ここに今まで書いたプログラムの本体を記述する。

ただ、基本的には、Windowsの場合、バッチプログラムだとどうなるんだろうな・・・。あんま「あれこれ多種類な言語を使う」自由度はそんなに無いんで、ぶっちゃけ、この辺の「書式」は忘れて構わないとは思いますよ。

注: UNIX/Linux(あるいはMac OS)だとバッチスクリプトをガンガン使う前提で設計されてるので、例えば良くある端末上でのPythonのスクリプトの走らせ方

> python hoge.py

を毎回やるとすげぇメンド臭い事になる。
そこで、UNIX/Linuxでは、端末でファイルを読み込んだ場合、即Pythonインタプリタが起動出来るように、プログラムファイルの冒頭に

#! /usr/bin/python

等のようにインタプリタの呼び出しパス(経路)を記述して、ファイル読み込みと同時に「自動的に」インタプリタを起動する事が出来る。
これをシェバングと呼び、UNIX系のOSとプログラミング言語(例えばPython以外でもPerlとかRubyとか)ではお馴染みのテクニックとなる。
ただし、ファイルの「どの関数が主プログラムなのか」分からない問題、と言うのがここで出てきて、そのために上での

if '__name__' == '__main__':
  # ここに今まで書いたプログラムの本体を記述する。

で「主関数」を指定する必要が出てくる。
なお、Windowsでもフツーに、

> python hoge.py

と走らせる時、やっぱり「どれが主関数なのか分からない」問題があって、このように端末上でスクリプトとして走らせる場合はやっぱり、

if '__name__' == '__main__':
  # ここに今まで書いたプログラムの本体を記述する。

する必要がある。

ちなみに、Windowsではシェバングの代わりに

@python -x "%~f0" %* & exit /b

と記述して、スクリプトファイルを*.pyではなくって*.batとして保存すればUNIX/Linux、あるいはMacOSみたいに実行出来る・・・と言う話もあるけど、個人的には未確認(試してみてください)。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!