Рубрики
Без рубрики

Python Eval ()

В этом руководстве показано, как использовать встроенный Python встроенный EVAL (). Зачем использовать это? Основное применение EVAL () заключается в том, чтобы взять пользовательский ввод во время выполнения и запустить его как выражение Python. Таким образом, вы можете создать калькулятор или позволить пользователям выполнять пользовательские вычисления на вычислительном кластере. Однако это использование также … Python Eval () Подробнее »

Автор оригинала: Chris.

В этом руководстве показано, как использовать Встроенный Python Eval () функция.

Зачем использовать это? Основное применение Eval () Чтобы выполнить ввод пользователя во время выполнения и запустить его в качестве выражения Python. Таким образом, вы можете создать калькулятор или позволить пользователям выполнять пользовательские вычисления на вычислительном кластере. Тем не менее, это использование также представляет собой самый большой риск безопасности: пользователь может запустить византийский) код в вашей сервере!

Как это работает? TLDR;

Python Eval (ы) разрабатывает строковый аргумент S В выражение питона запускает его и возвращает результат выражения. Это создает риск безопасности, потому что пользователь может использовать его для запуска кода на вашем компьютере. Например, если вы разрешите Eval (вход ()) пользователь может ввести OS.System ('RM -R *') Чтобы удалить все файлы в домашнем каталоге.

Примеры использования

Узнайте пример! Вот несколько примеров того, как использовать Eval () Встроенная функция :

>>> eval('2+2')
4
>>> eval('[1, 2, 3]*3')
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> eval('[x for x in range(10)]')
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> eval('"Alice".replace("e", "")')
'Alic'

Вы можете запустить любой код Python, который имеет возвращаемое значение в Eval () код. Вы можете даже создать свою собственную функцию и запустить его в Eval () :

>>> def f():
	return 42

>>> eval('f()')
42

Это дает вам большую гибкость в том, как вы используете функцию для запуска любого строкового выражения, вы можете столкнуться с Python, и он позволяет программно создавать Python Code и оценивать его во время выполнения.

Синтаксис EVAL ()

Вы можете использовать Eval () Способ с тремя различными списками аргумента.

Syntax: 
eval(string)
eval(string, globals)
eval(string, globals, locals) 
Аргументы нить Строка для оценки.
глобали Необязательно, по умолчанию нет. Словарь, в котором вы можете определить переменные, которые должны быть во всем мире доступным на выполненном объекте (локальное пространство имен).
местные жители Необязательно, по умолчанию нет. Словарь, в котором вы можете определить переменные, которые должны быть локально доступны на выполненном объекте (глобальное пространство имен).
Возвращаемое значение объект Возвращает результат анализа строкового аргумента и запустить его в качестве выражения Python.

Python Eval () Возвращаемое значение

Возвращаемое значение Eval () это объект Python, который является результатом анализа строка аргумент и запустить его как выражение питона. Код может иметь побочные эффекты, что означает, что он может изменить состояние вашей программы или даже ваш компьютер!

Но прежде чем мы будем двигаться дальше, я рад представить вам мою новую книгу Python Python One-listers (Amazon Link).

Если вам нравятся одноклассники, вы будете любить книгу. Это научит вам все, что нужно знать о Одно строка кода Python. Но это тоже Введение в компьютерную науку , наука о данных, машин обучения и алгоритмы. Вселенная в одной строке Python!

Книга была выпущена в 2020 году с помощью книги по программированию мирового класса Nostarch Press (San Francisco).

Ссылка: https://nostarch.com/pythononeliners.

[ОПАСНОСТЬ ZONE] Python Eval (Input ()) Ввод пользователя

Вы можете использовать Eval () Функция для запуска кода, который типизирован динамически пользователем:

def dangerous_function():
    # Do nasty stuff like removing files
    # or creating trojan horses
    print('You were hacked!')
    return 42

eval(input())

Вот как пользователь может взаимодействовать с вашим кодом во время выполнения:

dangerous_function()
You were hacked!

42

Вы видите, что был выполнен Easance_function (), который может содержать все виды опасных кодов. Если вы запустите это на своем сервере, пользователь может попытаться удалить все файлы на вашем сервере! Например, пользователь может использовать команду OS.System ('RM -RF *') Удалить все файлы и папки.

Интерактивный ноутбук Jupyter Eval ()

Упражнение : Запустите следующий интерактивный код и попробуйте запустить опасную функцию в интерактивной ноутбуке Jupyter!

Python exec () vs eval ()

Python’s EXEC () Функция принимает программу Python, как строку или исполняемый объект и запускает его. Eval () Функция оценивает выражение и возвращает результат этого выражения. Есть две основные различия:

  • EXEC () Может выполнить все исходный код Python, тогда как Eval () можно оценить только выражения.
  • EXEC () всегда возвращается Нет , тогда как Eval () Возвращает результат оцениваемого выражения.
  • EXEC () Может импортировать модули, тогда как Eval () не можешь.
exec('x=2;y=2;z=x*y;print(z)')
# 4

print(eval('2*2'))
# 4

Python Eval () Импорт

Можете ли вы импортировать библиотеку Python в Eval () функция? Нет, ты не можешь! Импорт Заявление – это заявление, а не выражение. Но Eval () может только выполнять выражения. Простой обходной путь состоит в том, чтобы создать функцию с побочными эффектами, которые импортируют модуль в тело функции:

def f():
    import random
    return random.randint(0, 9)

print(eval('f()'))
# 4

По умолчанию, Eval () Функция имеет доступ ко всем именам в dir () Пространство имен, так что вы также можете импортировать библиотеку во всем мире и использовать его в Eval () Функция:

import random
print(eval('random.randint(0, 9)'))

Как ограничить использование встроенных функций в пределах EVAL ()

Если вы не хотите разрешать пользователям получать доступ к встроенным функциям, вы можете ограничить это, предоставляя глобал Аргумент следующим образом:

eval(expression, {'__builtins__': None})

Например:

>>> eval('sum([1, 2, 3])')
6
>>> eval('sum([1, 2, 3])', {'__builtins__': None})
Traceback (most recent call last):
  File "", line 1, in 
    eval('sum([1, 2, 3])', {'__builtins__': None})
  File "", line 1, in 
TypeError: 'NoneType' object is not subscriptable

После ограничения встроенных функций во втором вызове Python поднимает ошибку NoneType объект не подписан Отказ Это снижает риски безопасности вашего заявления.

Резюме

Python Eval (ы) разрабатывает строковый аргумент S В выражение питона запускает его и возвращает результат выражения.

>>> eval('2+2')
4

Это создает риск безопасности, потому что пользователь может использовать его для запуска кода на вашем компьютере. Например, если вы разрешите Eval (вход ()) пользователь может ввести Импорт ОС; OS.System ('RM -R *') Чтобы удалить все файлы в домашнем каталоге.

Я надеюсь, что вам понравилось статью! Чтобы улучшить свое образование Python, вы можете присоединиться к популярной академии по электронной почте Free Finxter:

Хотите увеличить свои навыки Python в веселой и легкой потребности? Рассмотрим следующие ресурсы и стать магистральным кодером!

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.