برای فهم این مطلب به کد زیر توجه کنید:
def main():
print ("hello world!")
print ("Sufra")
>>>
Sufra
>>>
همانطور که بعد از اجرای کد مشاهده میکنید به جای چاپ هر دو مقدار print فقط sufra چاپ شده است. به این دلیل است که تابع if__name __ ==” __main__ را فراخوانی نکردیم.
↵ هر ماژول در پایتون ویژگی خاصی به نام __name__ دارد. وقتی ماژول به عنوان برنامه اصلی اجرا میشود، مقدار ویژگی __name__ در __main__ قرار میگیرد . در غیر این صورت مقدار __name__ حاوی نام ماژول است.
+ وقتی مفسر پایتون کدهای فایل را میخونه تمام کدها را پیدا و اجرا میکنه.
+ وقتی پایتون تمام کد ها را به عنوان برنامه اصلی اجرا میکنه ، متغیر خاص (__name__) را برای مقدار (“__main__”) تنظیم می کند.
+ وقتی تابع اجرا میشود با خواندن عبارت if بررسی میکنه که آیا مقدار __name__ برابر __main__ هست یا نه .
+ + در پایتون، if__name __ ==” __main__ به شما اجازه میدهد هر فایل پایتونی را به عنوان ماژول های قابل استفاده مجدد یا برنامه های مستقل اجرا کنید.
مانند C، پایتون از == برای مقایسه و از = برای تخصیص استفاده میکند. مترجم پایتون با دو روش اصلی از تابع استفاده می کند:
__name__= ‘نام ماژول ‘
if statement==false
کد بالا میگه اگر __name__ برابر نام ماژول بود عبارت شرطی ما مقدار false میگیره و اسکریپت داخل _main_ اجرا نمیشود.
if statement == True
مثالی دیگر
def main():
W=open(“foo.txt” ,”r”)
K=W.readlines()
for x in K:
print(x)
if __name__ == “__main__”:
main()
الان مشکل این چیه ؟
سلام
دوست عزیز طبق مطالبی که بالا توضیح دادم باید الگو را رعایت کنید . من یه مثال ساده میزنم انشاالله نتیجه بگیرید:
در واقع فایل را در تابعی به نام main قرار دادم .
def main():
W=open(“foo.txt” ,”r”)
K=W.readlines()
for x in K:
print(x)
if __name__ == “__main__”:
main()
از این __name__ میتوان در پایتون هر دو ورژن پایتون استفاده نمود
بله