ホームページ >バックエンド開発 >Python チュートリアル >Python での __name__ 値のテストの詳細な紹介

Python での __name__ 値のテストの詳細な紹介

高洛峰
高洛峰オリジナル
2017-03-19 14:01:481730ブラウズ

この記事では、主に Python の __name__ 値のテストの詳細な紹介を紹介します

テストで使用されるコードは次のとおりです:

#test_name0.py
def test():
    return name

print name
print test()
import test_name1
test_name1.test()
#test_name1.py
def test():
    print name
    
print name

pythonトップレベルのインタープリターでコマンドを実行すると、結果は次のようになります:

In [1]: type(name)
Out[1]: str
In [2]: print name
Out[2]: main
In [3]: import test_name0
test_name0
test_name0
test_name1
test_name1

cmd で の <code>python test_name0.py を実行すると、結果は次のようになります: python test_name0.py,结果如下:

main
main
test_name1
test_name1

由此可以看出:

(1)在python顶层解释器或直接运行的脚本中name=='main'

(2)在调用的模块中name==<a href="http://www.php.cn/code/8212.html" target="_blank">module</a> name

(3)发现一个非预期的情况,就是在运行了test_name0.py的脚本后再import test_name0,或者import test_name0后再运行test_name0.py

test_name0
test_name0
test_name1
これからわか​​ります:

(1) name== 'Python のトップレベル インタプリタ内の main またはスクリプトを直接実行します '

(2) 呼び出されたモジュール内 name==<a href="http://www.php.cn/code/%208212.html" target="_blank">モジュール<p> 名</p></a>

(3) 予期しない状況が見つかりました。つまり、test_name0.py スクリプトを実行した後、import test_name0 、または import test_name0 の後に test_name0.py スクリプトを実行すると、結果は

main
main
test_name1
または
test_name0
test_name0
test_name1
test_name1
ではなく

main
main
test_name1
test_name1
または rrreee になります。 .segmentfault で問題のキーを整理し、質問をしてこの問題が発生した理由を見つけました。 🎜つまり、Python モジュールには 🎜 キャッシュ🎜 があり、それを一度インポートしてから再度インポートした場合、モジュールの最上位スコープ内のコードは再度実行されません。 🎜🎜 (4) 2 つのモジュール test_name0 と test_name1 のテスト 🎜 関数 🎜 は同じ名前です。モジュール名が異なるため、2 つのテスト関数を区別できますが、モジュール名の重複は避けなければなりません。 。 🎜

以上がPython での __name__ 値のテストの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。