آموزش تابع eval در پایتون (Python)

به طور خلاصه تابع eval عبارت عددی یا معادل یک عبارت رو بر می گردونه، اما توضیح بیشتر این جمله با کلی مثال رو در این مطلب از مجموعه آموزش های پایتون (python) خواهید داد…! در انتهای همین پست فیلم آموزشی همین تابع رو هم قرار دادیم تا اگر حوصله خوندن متن نداشتید، بتونید اون رو نگاه کنید!

به طور کلی تابع eval چیست؟!

کلمه eval در واقع کوتاه شده عبارت evaluate است! evaluate در زبان انگلیسی (بجز معنی ارزیابی کردن که خب اینجا بدرمون نمی‌خوره!) به معنی “یافتن یک عبارت عددی یا معادل برای یک معادله، فرمول، تابع و …” است! خب پس این معنی رو یادتون باشه، چون از اینجا به بعد کلاً از خود همین کلمه evaluate استفاده می‌کنیم و نه معادل فارسیش!

تابع eval، یک عبارت string را به عنوان ورودی دریافت می‌کند، و آن ورودی را evaluate میکند و مقدار معادل آن را بر می‌گرداند! [شاید بپرسید چرا زیر عبارت (expression)، خط کشیدیم؟! جوابش اینه که دلیل داره، ولی بعداً باید توضیح بدیم!]

فهم تابع eval فقط در مثال امکان پذیره، پس با مثال‌های زیر همراه ما باشید!

مثال ۱

فرض کنید، یک عبارت مشابه زیر داریم:

یعنی در واقع یک لیست، که داخل double quotation (” “) قرار داره! همینطور که می‌دونید، هرچیزی که بین ” ” قراره بگیره از نوع string به حساب میاد و در واقع متغیر a یک string یا رشته است! اما شاید نخواید اینجوری بشه، و بخواید اون لیست داخل ” ” رو بخونه و اون رو در نظر بگیره! در این صورت از تابع eval استفاده می‌کنیم! (برای چندمین بار تاکید می‌کنم اگر هنوز هم با این تابع ارتباط برقرار نکردید، کمی صبر کنید و آموزش را تا آخر ادامه بدید، این مبحث رو فقط با مثال زیاد یاد خواهید گرفت! قطعاً الان یکم با این تابع احساس راحتی نمی‌کنید، ولی اشکال نداره… پیش ببرید مبحث رو…!)

در این صورت می‌نویسیم:

انگار در خط اول می‌گیم که معادل اون string ای که بهش ورودی دادیم رو بریزه توی متغیری به اسم b ! حالا در خط بعدش میایم b رو پرینت می‌کنیم!

و خروجی که به ما نشون میده همون لیست اصلی است که در زیر مشاهده می‌کنید!

مطلب مشابه پیشنهادی:

آموزش تابع پرینت (print)

مثال ۲

این مثال ۲ شدیداً کاربردی است! تاکید می‌کنم: شدیداً !

فرض کنید می‌خواید از کاربر دو تا عدد بگیرید و مجموع اون ها رو بهش برگردونید! پس پیش خودتون می‌گید: خب بنویسم! :

مطلب مشابه پیشنهادی:

آموزش تابع input برای ورودی گرفتن از کاربر

منطق کلی برنامه‌ای که نوشتید درسته! اما یک مشکل داره! مشکلش اینه که تابع input، عددی که کاربر وارد میکنه رو به عنوان string یا رشته ذخیره میکنه و نه عدد! و بعد مثلاً اگر کاربر وارد کنه ۱ و ۲، بجای اینکه حاصل جمع رو بهش ۳ بده، میده ۱۲!!! یعنی در واقع ۱ و ۲ رو به عنوان یک String در نظر گرفته و چون گفتیم a+b، میاد این دو رشته رو بهم می‌چسبونه! (به یاد بیارین که + در رشته‌ها مخصوص چسبوندن یا همان concatenate کردن آن‌ها است)!

سوال پیش میاد که پس باید چیکار کنیم؟!

جواب اینه که فقط کافیه، کد بالا رو به صورت زیر تغییر بدیم:

در واقع در خط یک داریم، اون چیزی که تابع input، به عنوان رشته در نظر می‌گیره رو با تابع eval معادل عددیش رو بدست میاریم. برای خط دو هم همینطور! و حالا در خط ۳، دوتا عدد رو باهم جمع کنیم و نه دوتا string! پس جوابی که می‌خوایم رو بهمون میده و دو عدد رو جمع میکنه!

مثال ۳

این مثال شاید بکم براتون عجیب باشه! از همین اول بگم که اگر یکم با این مثال ارتباط برقرار نکردید، خیلی نگران نباشید!

فرض کنید می‌نویسیم:

یادتون باشه که گفتیم، هرچی بین ” ” باشه، string حساب میشه! پس خروجی این چیزی که نوشتیم میشه!:

یعنی فقط همین print رو به عنوان یک رشته (یک متن) برامون مینویسه! همین!

اما اگر بنویسیم:

اینجا میاد و تووووی اون ” ” رو میبینه و اون رو اجرا میکنه! یعنی در واقع معادل اون دستور رو در نظر می‌گیره و یا به بیان دیگر میاد و اون دستور رو evaluate میکنه! و خروجیش میشه:

یعنی توی ” ” رو اجرا کرده! توی ” ” نوشته بود: پرینت کن ۱+۲ را! اینم همین کار رو کرد و ۱ رو به علاوه ۲ کرد و معادلش (یعنی ۳) رو به عنوان خروجی تحویل داد!

توجه کنید که این print(1+2) که اینجا نوشتیم، یک عبارت (یا expression) است!

مثال ۴

اگر بنویسیم:

خروجی میده:

 چون در واقع میاد داخل اون ” ” رو اجرا میکنه که هست ۱ کوچکتر از ۲ و چون درسته، مقدار True رو میریزه توی متغیر a! حالا در خط بعد میگیم مقدار a را پرینت کن، که اونم همین رو (یعنی True رو) پرینت میکنه!

توجه کنید که این ۱ کمتر از ۲ که اینجا نوشتیم، یک عبارت (یا expression) است!

مثال ۵ (اخطار)

اگر بنویسیم!:

بهمون خطا میده! این دلیل همون نکته‌ای که بود که چرا اول متن زیر عبارت خط کشیدم! نکتش اینه:

نکته: شما می‌تونید از تابع eval بخواید که یک expression (عبارت) رو برای شما evaluate کنه، و نه یک definition (تعریف) رو!

شاید بگید جمله فلسفی بود!! اما اینو داره میگه که اون چیزی که قراره تابع eval معادلش رو اجرا کنه اگر عبارت بود، که هیچی! تابع eval کار خودشو میکنه!

اما اگر مثلاً تعریف یک متغیر بود، تابع بود و این جور چیزا که بهش میگیم definition (تعریف) و نه expression (عبارت)، دیگه قطعاً تابع eval خطا میده!

واسّلام! واقعا توضیح این تابع سخت بود! امیدوارم آموزش خوبی بوده باشی، لطفا نظراتتون رو برای ما بفرستید!

فیلم آموزشی

در ادامه برای فهم هر چه بیشتر این مبحث، فیلم آموزشیش رو هم براتون قرار میدیم…!

دانلود فیلم آموزشی (حجم: حدود ۱۹ مگابایت) (مدت زمان: ۱۲ دقیقه و ۱۰ ثانیه)

توجه مهم: در صورتی که می‌خواهید فیلم را به صورت آنلاین مشاهده کنید، روی لینک دانلود فیلم با لینک مستقیم کلیک کنید! اما در صورتی که می‌خواهید فیلم را دانلود کنید، بر روی لینک دانلود فیلم با لینک مستقیم راست کلیک و سپس Save Link As… را انتخاب کنید! دلیل اینکه مشاهده‌ی آنلاین فیلم‌ها را در این صفحه قرار نداده‌ایم، این است که سرعت load سایت بیشتر شود و شما کمتر منتظر بمانید!

با ما کولاک کنید …

کاری از گروه آموزشی کولاک

کانال تلگرامی ما رو هم دنبال کنید (هر روز تمرین پایتون و مطالب مفیدی قرار میدیم)@Koolac_Org
+