4
#! /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 ~]$ 
4

5 に答える 5

31

関数を呼び出す必要があります。

def main():  # declaring a function just declares it - the code doesn't run
    print("boo")

main()  # here we call the function
于 2013-03-16T07:08:55.363 に答える
14

スクリプトがコマンドラインから実行されたときに、あなたがやりたかったことは、印刷機能を呼び出すことだと思います。

Python では、コードを含むスクリプトが最初に起動されたスクリプトと同じかどうかは、__name__変数を__main__.

#! /usr/bin/python

if __name__ == '__main__':
    print("boo")

これらのコード行だけで:

def main():
    print("boo")

関数を定義していて、実際には呼び出していません。関数を呼び出すには、次のmain()ように呼び出す必要があります。

main()
于 2013-03-16T07:12:42.297 に答える
4

その関数を呼び出し、スクリプトを更新する必要があります

#! /usr/bin/python

def main():
    print("boo")

#call it
main()
于 2013-03-16T07:09:35.360 に答える
3

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()

上記は次のように機能しています。

  • importPythonモジュールを取得すると、その属性として割り当てられた(通常string、インポートされた名前)が取得されます。__name__
  • スクリプトを直接実行する場合 (python vm を呼び出し、引数としてスクリプトの名前を渡すことにより)、__name__属性はに設定されます__main__
  • したがって、上記のイディオムを使用すると、スクリプトを自由にimporting してプラグ可能なモジュールとして使用することも、スクリプトを直接実行して の下の一連の式を直接評価することもできますif __name__ == '__main__':

さらに情報を掘り下げる必要があると思われる場合は、私の情報源は次のとおりです。

于 2013-03-16T15:14:24.450 に答える