تابع main در پایتون چیست؟
تابع اصلی یا main پایتون نقطه شروع هر برنامه میباشد. وقتی برنامه اجرا میشود، مفسر پایتون (python interpreter) کد را به صورت ترتیبی اجرا میکند. تابع اصلی تنها به هنگام اجرای فایل به صورت یک برنامه پایتون، اجرا میشود. اما این تابع هنگام اجرای فایل به عنوان یک ماژول اجرا نمیشود. برای درک این موضوع، کد زیر را درنظر بگیرید:
def main(): print ("hello world!") print ("Guru99")
در اینجا، دو بخش print داریم، اولی درون تابع main تعریف شده وعبارت Hello World را چاپ میکند و دیگری مستقل بوده و عبارت Guru99 را چاپ میکند. وقتی که تابع ()def main اجرا میشود:
- تنها عبارت Guru99 چاپ میشود.
- و عبارت Hello World چاپ نمیشود.
به این دلیل که ما عبارت فراخوانی تابع “if__name__== “__main__” را اعلان نکرده ایم.
مهم است که پس از تعریف تابع main، بدنه را با عبارت “if__name__== “__main__ فراخوانی کرده و سپس کد را اجرا کنیم، تنها در این صورت است که عبارت hello wolrd در خروجی کنسول ظاهر میشود. کد زیر را درنظر بگیرید:
def main(): print("hello world!") if __name__ == "__main__": main() print("Guru99")
در این حالت Guru99 چاپ میشود.
توضیح کد در زیر آمده است.
- وقتی که مفسر پایتون فایل سورس را میخواند، تمام کد موجود در آن را اجرا میکند.
- وقتی که پایتون فایل سورس را به عنوان برنامه main اجرا میکند، متغیر ویژه (__name__) را با مقدار (“__main__”) ست میکند.
- وقتی که تابع اصلی را اجرا میکنید، آنگاه دستور «if» خوانده شده و بررسی میشود که آیا متغیر __name__ برابر __main__ است یا نه.
- در پایتون عبارت “if__name__==”__main__” به شما اجازه میدهد که فایل را به صورت یک ماژول قابل استفاده مجدد یا یک برنامه منفرد اجرا کنید.
متغیر __name__ و ماژول پایتون
برای درک اهمیت متغیر __name__، کد زیر را ملاحظه کنید:
def main(): print("hello world!") if __name__ == "__main__": main() print("Guru99") print("Value in built variable name is: ",__name__)
حال کد را به صورت یک ماژول واردشده (imported module) درنظر بگیرید.
import MainFunction print("done")
همانند زبان C، پایتون از «==» برای مقایسه استفاده میکند و از «=» برای تخصیص عبارت بهره میگیرد. مفسر پایتون از تابع main به دو صورت استفاده میکند.
اجرای مستقیم
- __name__=__main__
- اگر دستور برابر True شود، آنگاه اسکریپت موجود در __main__ اجرا خواهد شد.
وارد شده به صورت یک ماژول
- نام ماژول= __name__
- اگر دستور برابر false باشد، آنگاه عبارت موجود در __main__ اجرا نخواهد شد.
وقتی که کد اجرا میشود، نام ماژول با دستور if بررسی میشود. این سازوکار اطمینان حاصل میکند که تابع main تنها در حالت اجرای مستقیم اجرا میشود و در حالت واردشده به صورت ماژول اجرا نخواهد شد.
مثالهای بالا کدهای پایتون 3 هستند، اگر بخواهید پایتون 2 را بکار ببرید، باید از کد زیر استفاده کنید.
def main(): print "Hello World!" if __name__== "__main__": main() print "Guru99"
در پایتون 3، نیازی به استفاده از if __name ندارید. کد زیر نیز به درستی عمل خواهد کرد.
def main(): print("Hello World!") main() print("Guru99")
نکته: مطمئن شوید که پس از تعریف تابع main، مقداری تورفتگی (indent) قرار دهید و کد را درست زیر ()def main قرار نمیدهید. در غیر این صورت، با پیغام خطا مواجه میشوید.
منبع: ترجمه از سایت guru99.com
امیدوارم تا این جلسه از آموزش پایتون براتون مفید واقع شده باشه و در آینده شغلی و پروژههای خود از آن استفاده کنید. لطفا نظرات خودتان را در قسمت کامنتها ⇓ بنویسید.
اگر این نوشته برایتان مفید بود لطفا کامنت بنویسید.
اموزش خیلی خوبی بود برای ورود به زبان برنامه نویسی پایتون. فکر می کنم محبوب ترین زبان برنامه نویسی باشه. سپاس از لطفتون.