Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのトップレベルスクリプト環境(__main__)


モジュールオブジェクトは、さまざまな属性によって特徴付けられます。属性名には、二重下線__が接頭辞と後置で付けられます。モジュールの最も重要な属性は__name__です。 Pythonがトップレベルの実行可能コードとして実行されている場合、つまり、標準入力、スクリプト、またはインタラクティブプロンプトから読み取られる場合、__name__属性は' __ main __に設定されます。 '。

>>> __name__
'__main__'

スクリプト内からも、__name__属性の値が「__main__」に設定されていることがわかります。次のスクリプトを実行します。

'module docstring'
print ('name of module:',__name__)

出力

name of module: __main__

ただし、インポートされたモジュールの場合、この属性はPythonスクリプトの名前に設定されます。 hello.pyモジュールの場合

>>> import hello
>>> hello.__name__
hello

前に見たように、__name__の値はトップレベルモジュールの__main__に設定されます。ただし、インポートされたモジュールの場合、ファイルの名前に設定されます。次のスクリプト(moduletest.py)を実行します

import hello
print ('name of top level module:', __name__)
print ('name of imported module:', hello.__name__)

出力

name of top level module: __main__
name of imported module: hello

関数を含むPythonスクリプトにも、特定の実行可能コードが含まれている場合があります。したがって、それをインポートすると、そのコードは自動的に実行されます。このスクリプトmessages.pyには2つの関数があります。実行可能部分では、thanks()関数の引数としてユーザー入力が提供されます。

def welcome(name):
print ("Hi {}. Welcome to TutorialsPoint".format(name))
return
def thanks(name):
print ("Thank you {}. See you again".format(name))
name = input('enter name:')
thanks(name)

明らかに、messages.pyを実行すると、以下のような感謝のメッセージが出力に表示されます。

enter name:Ajit
Thank you Ajit. See you again

以下のmoduletest.pyスクリプトがあります。

import messages
print ('name of top level module:', __name__)
print ('name of imported module:', messages.__name__)

ここで、moduletest.pyスクリプトを実行すると、inputステートメントとwelcome()の呼び出しが実行されることがわかります。

c:\python37>python moduletest.py

出力

enter name:Kishan
Thank you Kishan. See you again
enter name:milind
Hi milind. Welcome to TutorialsPoint

これは、両方のスクリプトの出力です。ただし、メッセージモジュールから関数をインポートしたいが、その中の実行可能コードはインポートしたくない。

ここで、トップレベルスクリプトの__name__attributeの値が__main__であるという事実が役立ちます。 __name__が__main__と等しい場合にのみ入力および関数呼び出しステートメントを実行するようにmessages.pyスクリプトを変更します。

"docstring of messages module"
def welcome(name):
print ("Hi {}. Welcome to TutorialsPoint".format(name))
return
def thanks(name):
print ("Thank you {}. See you again".format(name))
if __name__=='__main__':
name = input('enter name')
thanks(name)

実行およびインポートできるモジュールが必要な場合は、上記の手法を使用してください。 moduletest.pyは変更を必要としません。メッセージモジュールの実行可能部分は現在実行されません。

enter name: milind
Hi milind. Welcome to TutorialsPoint

これにより、messages.pyスクリプトを個別に実行できなくなるわけではないことに注意してください。


  1. Python仮想環境

    はじめに 開発者は、Python標準ライブラリの一部ではないモジュールとパッケージを使用する必要があり、この特定のアプリケーションにのみ必要なPythonプロジェクトを扱うことがよくあります。現在のバージョンのPython(python-3.6を想定)をインストールしたが、プロジェクトで特定のpythonバージョン(この特定のアプリケーションには2.7)が必要な場合を考えてみます。したがって、新しいパッケージだけでなく、特定の要件が発生する可能性があります。すでにインストールされているアプリケーションのバージョン。その場合、要件が競合し、バージョン2.7または3.6のいずれかをインストールす

  2. Pythongetpassモジュール

    Pythonの標準ライブラリのgetpassモジュールで定義されている2つの関数があります。これらは、ユーザーの資格情報を検証した後にのみ端末ベースのアプリケーションを実行する必要がある場合に役立ちます。 getpass() この関数は、ユーザーにパスワードの入力を求めます。デフォルトでは、ユーザーが端末に入力したキーはエコーされません。また、端末に表示されるデフォルトのプロンプトは「パスワード」であり、パラメータとして文字列を指定することでカスタマイズできます。 次の例では、PythonプロンプトはWindowsのコマンドプロンプトターミナルから呼び出されます。入力したパスワードは端末