if __name__ == __main__
'un kapsamı nedir? Bu ifadeyle kapsanan her şey küresel alanda mı?if __name__ == __main__
cevap
if __name__ == '__main__'
bloğu ne olursa olsun özel bir şey yoktur. Yani, kapsamı gerçekleştiği yere göre belirlenir. Bu tür bloklar tipik olarak en üst düzeyde meydana geldiğinden, kapsamları globaldir.
Bu komut, tamamen yasal olan bir işlevde ortaya çıkarsa, kapsamı yerel olur; ancak, __name__
, yine de modülde tanımlanan genel değere yine de çözüm getirir.
>>> if __name__ == '__main__':
... x = 1
... print 'x' in globals()
True
düzenlemek: user4815162342 bu if-ifadesi herhangi kapsamı yazılmış edilebileceğini mükemmel bir noktaya değinmiş. Çoğu zaman küresel kapsamda yazılır.
>>> def foo():
... if __name__ == '__main__':
... bar = 1
... foo()
... print 'bar' in globals()
False
Python blok-yerel kapsamı yoktur, buna bağlı olarak bir if
bloğunun içinde kullanan tüm değişkenler en yakın çevreleyen "gerçek" kapsamında eklenecektir:
Burada bir işlev içinde. (Bir if..main
blok için, genellikle modülün nitelikleri olacak.)
Bu sürece küresel kapsamda geçerli: değil içinden yani küresel kapsamda denir
- işlev
- yürütülmekte olan kod dosyasında. kod
foo.py
uğraşıyoruz varsayalım vebar.py
yılında, yönergeyifrom foo import *
var:
(2) göstermek için. Bu durumda, foo.py
'daki if __name__ == "__main__":
bloğu yürütülür. Bu blok yalnızca foo.py
Aslında, '__name__ == '__main __'' bloğu iyi çalıştırılırsa, sadece '__name__' '__main__' değil,' foo 'olur. __name__'nin bu ayarı, değişken kapsam belirleme kurallarına tamamen ortogonaldir. – user4815162342
@ user4815162342: Haklısınız. Ben sadece OP'in 'foo'yu' 'bar' içinde içe aktarmadığından emin olmak istedim ve '' foo''da' if '' değişkeninin 'bar'da görünmemesi nedenini merak ettim. küresel kapsam. – inspectorG4dget
- 1. eğer __name__ == '__main__' çalışmıyor ipython
- 2. Eğer __name__ == '__main__' için kısayol ':
- 3. `if __name__ == '__main __'` Ruby'de eşdeğer
- 4. Python: İthalat ve Argparse'ı Sıfırla Eğer __name__ == '__main__'?
- 5. python joblib Windows üzerinde Paralel bile çalışmıyor "if" __name__ == '__main__': "eklenir
- 6. Python'un `__name__ == '__main __'`?
- 7. Python'da getLogger'ı aramadan önce __name__ == "__main__" için açıkça kontrol etmem gerekiyor mu?
- 8. Ana() işlevi neden '__main__' içeriğinde tanımlanmamış?
- 9. Python'da __main__ modülünün dosya adı nasıl alınır?
- 10. Python örneklerinin neden __name__ özniteliği yok?
- 11. Python'un kurulum araçları `__name__ ==" __main __ "` uygulama stilini destekliyor mu?
- 12. if/else'den kurtulmak if/else
- 13. Python işlevin modülünü çağıran __name__ alın
- 14. () Preprocessor makrolar içinde if-else if zincir
- 15. Değerlendirmede if?
- 16. if ifadesi
- 17. if-statement
- 18. Python'un çoklu işlem modülü, Windows'da yeni bir işlem başlatırken neden __main__ dosyasını içe aktarıyor?
- 19. Kıvılcım gönderen dışa aktarılan __main__ dosyasından SparkContext'i değiştir
- 20. if (! Variable) ve if (isset ($ variable)) arasındaki fark nedir?
- 21. if (! $ Array) ile if (boş ($ array)) arasında bir fark var
- 22. Yardım! - SQL - IF Else IF Dönen seçilebilir seçim için mantıksal
- 23. MySQL - CASE vs IF Bildirimi vs IF işlevi
- 24. 'if' point-free
- 25. If ifadesi döngü?
- 26. Hogan JS IF ifadeleri
- 27. If-else-statement
- 28. bash: If ifadesi
- 29. PHP form eylemini IF
- 30. Linux if-else çalışmıyor
çalıştırıldığında çalıştırılır. Biraz kafa karıştırıcı, aynı zamanda 'locals() ': http://ideone.com/WbvTj. Muhtemelen, modülün üst seviyesinde, global kapsam yerel olanla aynıdır. – millimoose