#! /usr/bin/python
def main():
print("boo")
このコードは、Python 3.3 で実行しようとしても何もしません。エラーでも何でもありません。どうしたの
[tim@tim-arch ~]$ gvim script
[tim@tim-arch ~]$ sudo chmod 775 script
[tim@tim-arch ~]$ ./script
[tim@tim-arch ~]$
#! /usr/bin/python
def main():
print("boo")
このコードは、Python 3.3 で実行しようとしても何もしません。エラーでも何でもありません。どうしたの
[tim@tim-arch ~]$ gvim script
[tim@tim-arch ~]$ sudo chmod 775 script
[tim@tim-arch ~]$ ./script
[tim@tim-arch ~]$
関数を呼び出す必要があります。
def main(): # declaring a function just declares it - the code doesn't run
print("boo")
main() # here we call the function
スクリプトがコマンドラインから実行されたときに、あなたがやりたかったことは、印刷機能を呼び出すことだと思います。
Python では、コードを含むスクリプトが最初に起動されたスクリプトと同じかどうかは、__name__
変数を__main__
.
#! /usr/bin/python
if __name__ == '__main__':
print("boo")
これらのコード行だけで:
def main():
print("boo")
関数を定義していて、実際には呼び出していません。関数を呼び出すには、次のmain()
ように呼び出す必要があります。
main()
その関数を呼び出し、スクリプトを更新する必要があります
#! /usr/bin/python
def main():
print("boo")
#call it
main()
Python では、一連の小さなタスクを順番に実行するスクリプトを作成する場合、それらを含む関数を作成する必要はまったくありません。それぞれを 1 行に並べるだけです。または、次のような式区切り文字を使用します;
(あまりお勧めしませんが、必要に応じて実行できます)。
task1
task2
task3
task4
また
task1; task2; task3; (again **not** really recommended, and certainly not pythonic)
あなたの場合、コードは次のようになります。
print('boo')
print('boo2')
print('boo3')
main()
メソッドがなくても、順番に評価されるため、期待どおりに動作します。
これらの一連のタスクに対して関数を作成する理由は次のとおりです。
他のプログラミング言語のメソッドに似たコードを書かざるを得ない場合はmain()
、次の python イディオムを使用してください (これまでに他のユーザーが述べたように)。
if __name__ == '__main__':
doSomething()
上記は次のように機能しています。
import
Pythonモジュールを取得すると、その属性として割り当てられた(通常string
、インポートされた名前)が取得されます。__name__
__name__
属性はに設定されます__main__
import
ing してプラグ可能なモジュールとして使用することも、スクリプトを直接実行して の下の一連の式を直接評価することもできます。if __name__ == '__main__':
さらに情報を掘り下げる必要があると思われる場合は、私の情報源は次のとおりです。