مثال
اجرای دستور ‘print(55)’:
x = 'print(55)'
eval(x)
توضیحات
تابع eval()
یک خط دستور پایتون که در ورودی می گیرد را اجرا می کند.
تابع exec()
مشابه تابع eval()
است اما برخلاف تابع eval()
که فقط یک عبارت کوتاه را اجرا کند، می تواند بلوک های کد بزرگی را اجرا کند.
سینتکس
eval(expression, globals, locals)
پارامتر های ورودی
پارامتر | توضیح |
---|---|
expression | یک متن، شامل یک کد پایتون که قرار است اجرا شود. |
globals | اختیاری. یک دیکشنری شامل پارامتر های global |
locals | اختیاری. یک دیکشنری شامل پارامتر های local |
مثال
z = 50
x = 'print(z + 100)'
eval(x)
در تابع eval()
، پارامترهای locals
و globals
برای تعیین محدوده متغیرها در هنگام اجرا مورد استفاده قرار میگیرند.
- پارامتر
globals
:globals
یک دیکشنری است که متغیرهای global را تعیین میکند.- متغیرهای global، متغیرهایی هستند که در سطح بالاتر از تابع یا بلوک کد فعلی تعریف شدهاند.
- اگر در
globals
یک متغیر با یک نام تعریف شود،eval()
از آن مقدار استفاده میکند.
- پارامتر
locals
:locals
همچنین یک دیکشنری است اما به متغیرهای local تابع یا بلوک کد ارتباط دارد.- متغیرهای local، متغیرهایی هستند که در داخل تابع یا بلوک کد مورد نظر تعریف شدهاند.
- اگر در
locals
یک متغیر با یک نام تعریف شده باشد،eval()
از آن مقدار استفاده میکند.
با استفاده از این دو پارامتر، میتوانید محدوده دسترسی به متغیرها را در هنگام اجرای eval()
کنترل کنید. این امکان به شما این امکان را میدهد که متغیرها را در یک محدوده خاص قرار داده و از آنها در هنگام اجرا استفاده کنید. این موضوع برای جلوگیری از تداخل نام متغیرها در محیطهای مختلف و کنترل بهتر محدوده دسترسی متغیرها بسیار مفید است.
استفاده از locals
یا globals
در تابع eval()
به وابسته به نیازهای شما و ساختار کد مورد نظر دارد. در زیر توضیحاتی درباره زمانهایی که ممکن است از هرکدام استفاده کنید آورده شده است:
- استفاده از
locals
:- زمانی که تابع eval را درون یک تابع دیگر فراخوانی کرده اید و میخواهید از متغیرهای محلی (local variables) درون آن تابع یا بلوک کد خاص استفاده کنید.
- اگر در تابع یا بلوک کد مورد نظر متغیرهای محلی تعریف شدهاند و شما میخواهید در
eval()
از آنها استفاده کنید، از تابعlocals
استفاده کنید.def example_function(): local_var = 42 eval('print(local_var)', globals(), locals())
- استفاده از
globals
:- زمانی که میخواهید از متغیرهای global در سطح بالاتر از تابع یا بلوک کد مورد نظر استفاده کنید.
- اگر متغیرها در سطح بالاتر از تابع تعریف شدهاند و شما میخواهید در
eval()
از آنها استفاده کنید، ازglobals
استفاده کنید.global_var = 100 eval('print(global_var)', globals())
- همچنین اگر بخواهید متغیری تعریف کنید که فقط روی کد درون eval اعمال شود و با متغیری که با همان نام خارج از تابع تعریف شده است تداخلی نداشته باشد، میتوانید با تعریف یک دیکشنری جدید و افزودن متغیرهای مورد نظر به آن، از
globals
استفاده کنید.age = 100 eval('print(age)', {'age': 32})
از آنجا که استفاده از globals
و locals
به وابستگی به ساختار کد شما دارد، توصیه میشود که با دقت از آنها استفاده کنید تا جلوگیری از تداخل نام متغیرها و دسترسی به محدودههای ناخواسته.
salam khaste nabashid.
chejuri mishe yek tabbe nevesht manand tabbe eval
age mitonid lotfan rahnamai konid va be email man msg bedi
سلام. برای اینکار می تونید یک تابع بسازید که کدی که قرار هست اجرا بشه رو به عنوان ورودی بگیره (مثل eval) و اون رو توی یک فایل پایتون ذخیره کنه. سپس با استفاده از تابع execfile('file.py') محتوای فایل رو اجرا کنید و خروجی رو برای کاربر برگردونید.
z=50
x = 'print(z + 100)'
eval(x, {'z': 200})
چرا خروجی 300 نشون میده من قسمت globals و locals متوجه نشدم
در انتهای متن، توضیحاتی برای کاربرد این دو پارامتر و تفاوت های آنها اضافه شد. 🙏