Позволяет выполнить строку-выражение с кодом на Python
Функция eval() выполняет строку-выражение, переданную ей в качестве обязательного аргумента и возвращает результат выполнения этой строки.
Аргументами eval() являются строка-выражение expression , которую требуется исполнить и необязательные глобальные globals и локальные locals значения. Передаваемые в функцию глобальные переменные должны быть словарем dict . Передаваемые локальные переменные могут быть любым отображающим объектом.
Если глобальные переменные указаны, но словарь globals не содержит атрибута __builtins__ данные переданного словаря со значениями будут дополнены данными общего глобального пространства, перед разбором выражения. Таким образом, выражение будет иметь доступ ко всем встроенным модулям.
Если локальные locals переменные не указаны, то используется словарь глобального пространства.
Если оба словаря опущены, выражение выполняется с глобальными и локальными значениями в среде, где функция eval() вызывается. Обратите внимание, что eval() не имеет доступа к вложенным областям
Функция eval() также может быть использована для выполнения кода, который возвращает функция compile() . Если объект кода в compile() собран в режиме exec будет возвращено None .
Функции eval() можно передавать результаты функций globals() и locals() .
Если вам необходимо выполнить динамический код, записанный в строку, то обратитесь к документации по функции exec() .
Примеры выполнения строки-выражения с кодом функцией eval() .
>>> x = "print('Привет')" >>> eval(x) # Привет >>> y = 'print("5 + 10 =", (5+10))' >>> eval(y) # 5 + 10 = 15 >>> s=3 >>> eval('s==3') # True >>> eval('s + 1') # 4 >>> eval('s') # 3 >>> eval('str(s)+"test"') # '3test'
- ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
- Функция abs(), абсолютное значение числа
- Функция all(), все элементы True
- Функция any(), хотя бы один элемент True
- Функция ascii(), преобразует строку в ASCII
- Функция bin(), число в двоичную строку
- Класс bool(), логическое значение объекта
- Функция breakpoint(), отладчик кода
- Класс bytearray(), преобразует в массив байтов
- Класс bytes(), преобразует в строку байтов
- Функция callable(), проверяет можно ли вызвать объект
- Функция chr(), число в символ Юникода
- Класс classmethod, делает функцию методом класса
- Функция compile() компилирует блок кода Python
- Класс complex(), преобразует в комплексное число
- Функция delattr(), удаляет атрибут объекта
- Класс dict() создает словарь
- Функция dir(), все атрибуты объекта
- Функция divmod(), делит числа с остатком
- Функция enumerate(), счетчик элементов последовательности
- Функция eval(), выполняет строку-выражение с кодом
- Функция exec(), выполняет блок кода
- Функция filter(), фильтрует список по условию
- Класс float(), преобразует в вещественное число
- Функция format(), форматирует значение переменной
- Класс frozenset(), преобразует в неизменяемое множество
- Функция getattr(), значение атрибута по имени
- Функция globals(), переменные глобальной области
- Функция hasattr(), наличие атрибута объекта
- Функция hash(), хэш-значение объекта
- Функция help(), справка по любому объекту
- Функция hex(), число в шестнадцатеричную строку
- Функция id(), идентификатор объекта
- Функция input(), ввод данных с клавиатуры
- Класс int(), преобразует в тип int
- Функция isinstance(), принадлежность экземпляра к классу
- Функция issubclass(), проверяет наследование класса
- Функция iter(), создает итератор
- Функция len(), количество элементов объекта
- Класс list(), преобразовывает в список
- Функция locals(), переменные локальной области
- Функция map(), обработка последовательности без цикла
- Функция max(), максимальное значение элемента
- Класс memoryview(), ссылка на буфер обмена
- Функция min(), минимальное значение элемента
- Функция next(), следующий элемент итератора
- Класс object(), возвращает безликий объект
- Функция oct(), число в восьмеричную строку
- Функция open(), открывает файл на чтение/запись
- Функция ord(), число символа Unicode
- Функция pow(), возводит число в степень
- Функция print(), печатает объект
- Класс property(), метод класса как свойство
- Класс range(), генерирует арифметические последовательности
- Функция repr(), описание объекта
- Функция reversed(), разворачивает последовательность
- Функция round(), округляет число
- Класс set(), создает или преобразовывает в множество
- Функция setattr(), создает атрибут объекта
- Класс slice(), шаблон среза
- Функция sorted(), выполняет сортировку
- Декоратор staticmethod(), метод класса в статический метод
- Класс str(), преобразует объект в строку
- Функция sum(), сумма последовательности
- Функция super(), доступ к унаследованным методам
- Класс tuple(), создает или преобразует в кортеж
- Класс type(), возвращает тип объекта
- Функция vars(), словарь переменных объекта
- Функция zip(), объединить элементы в список кортежей
- Функция __import__(), находит и импортирует модуль
- Функция aiter(), создает асинхронный итератор
- Функция anext(), следующий элемент асинхронного итератора
Как работает функция eval python
Эти функции являются наиболее употребительными в программистской практике, поэтому просто необходимо рассмотреть их всех.
Возвращает абсолютное значение числа, т.е модуль данного числа
Создаёт на основе объекта object буфер, начиная с позиции offset(или с начала объекта), размером size(или до конца объекта). Функция применима только к тем объектам, по которым возможно создание буфера – строк, массивов, других буферов. Функция возвращает указатель на результирующий буфер.
Возвращает true если объект может быть вызван (функция или класс)
Возвращает строку из одного символа, который соответствует числовому значению i и находится в промежутке от 0 до 255, например, chr(67) вернёт символ ‘a’. Функция chr(i) противоположна ord(i)
Сравнивает x и y, возвращает положительное значение, когда x>y, отрицательное, когда x
Составляет из двух числовых значений x и y константный список, приводя оба числа к общему виду, используя приведение типов.
Возвращает комплексное число, состоящее из реальной и мнимой частей(необязательно), аргументы интерпретирует подобным образом. Если первый аргумент строка, то комплексное число составляется из строки, а второй аргумент должен быть опущен. Если первый параметр не строка, а второй параметр опущен, то первый аргумент приводится к нормальному виду и возвращается.
Создаёт тип данных словарь из переданной последовательности, если ничего не передано – создаётся пустой словарь, например:
dict([(i-1, i) for i in (2, 3)])
Выводит список элементов переданного объекта. Если в функцию ничего не передано, то выводится список всех локальных объектов, например:
[‘argv’, ‘exit’, ‘modules’, ‘path’, ‘stderr’, ‘stdin’, ‘stdout’]
Выполняет деление а на b и возвращает паручисел: частное и остаток, если числа целые. Для дробных чисел возвращается частное округленное до ближайшего целого, не превосходящего данное, и остаток от округления, таким образом q * b + a % b очень близко к числу а.
Выполняет выражение expression с помощью интерпретатора Питона, т.е выражение расценивается как кусок кода Питона, при этом можно передавать словари содержащие глобальные и локальные переменные. По умолчанию можно воспользоваться функциями globals() и locals() возвращающими текущие глобальные и локальные переменные соответственно, например:
Функция также может выполнять компилированный с помощью compile код. Функция eval возвращает значение, являющееся результатом выполнения кода.
execfile(file[, globals[, locals]])
Функция работает идентично функции eval, за тем исключением, что выполняет не строку кода, а целый файл, в остальном см описание функции eval.
file(filename[, mode, bufsize])
Функция открывает файл filename в режиме mode и использует для буферизированного ввода/вывода буфер размером в bufsize. Доступные режимы – r, w(уничт. содержимое), a, r+, w+(уничт. содержимое), a+. Подробнее см. в главе файловый ввод/вывод
Внимание: для совместимости с предыдущими версиями Питона используйте для открытия файлов функцию open идентичную данной.
Создаёт список только из тех элементов, для которых функция пользователя function возвращает истину.
Конвертирует строку x в число с плавающей точкой. Функция может возвращать бесконечность(NaN), когда строка слишком велика. При преобразовании строка может содержать число как в научном так и в фиксированном формате. Если во входной строке встречается неверный символ, то преобразование прекращается и возвращается то значение, которое было правильным.
Возвращает словарь глобальных объектов.
Возвращает хеш для объекта(если это возможно). Хеш используется для быстрого поиска в словарях, так как позволяет быстро сравнивать ключи. Хеш состоит только из целых чисел.
Вызывает встроенную систему документации Питона. Если аргумент строка, то вызывается справка по модулю, функции, файлу, методу, ключевому слову, раздел помощи, в зависимости от переданной строки. Если аргумент – объект, то вызывается его справка.
Конвертирует целое число в строку из шестнадцатицентричных цифр. Будьте осторожнее при переводе отрицательных чисел, так как сложно угадать, как такие строки будут интерпретированы на других машинах, с иной длиной слова. Например, -1 на 32-х разрядной машине в шестандцатицентричной форме равно 0xffffffff, а на 16-и разрядной системе такая строка вовсе не равна -1.
Возвращает уникальный идентификатор объекта, соответствующий адресу этого объекта в памяти. После операции присваивания несколько объектов могут ссылаться на одну и ту же область памяти и их id() будет равен.
Осуществляет ввод с клавиатуры строки кода Питона, т.е эквивалентна eval(raw_input()). Функция не защищена от ошибок пользователя и вызывает исключение SyntaxError при ошибке синтаксиса. Значение prompt используется в качестве подсказки. В общем функция используется для быстроты ввода кода Питона. В других случаях лучше использовать raw_input().
Преобразует строку или число в целое. Если аргумент строка, то она преобразуется в целое. Если указывается параметр radix, то строка расценивается как число в указанной системе исчисления [2-36]. Если radix 0 то система исчисления определяется исходя из формата строки. При передаче функции числа с точкой, его дробная часть отсекается, а параметр radix игнорируется, т.е возвращается целая часть числа.
Возвращает истину, если object является экземпляром класса (или класса, наследующего данному) или типа classinfo. Если classinfo не является объектом или типом, то возбуждается исключение TypeError.
Возвращает истину, если class1 наследует class2. При этом нет разницы является ли наследование прямым или косвенным через другие классы (в любом из случаев наследования возвращается истина).
Возвращает длину (количество элементов) для аргумента s. S может быть последовательностью любого типа или словарём.
Возвращает список с элементами входящими в последовательность sequence, т.е осуществляет преобразование последовательности в список. Если функции передан список, то она возвращает его копию.
Возвращает словарь, состоящий из локальных объектов и переменных. Изменять этот словарь нельзя.
Преобразует строку или число в длинное целое. Если аргумент строка, то она преобразуется в целое. Если указывается параметр radix, то строка расценивается как число в указанной системе исчисления [2-36]. Если radix 0 то система исчисления определяется исходя из формата строки. При передаче функции числа с точкой, его дробная часть отсекается, а параметр radix игнорируется, т.е возвращается целая часть числа.
Возвращает список, являющийся
результатом работы функции для каждого элемента списка.
В функцию map можт быть передано несколько
списков, необходимо только соблюдать соответствующее количество
параметров в пользовательской функции.
Если передан один параметр s и он является последовательностью, то возвращается максимальный элемент последовательности, если передано несколько параметров, то возвращается наибольшее из них.
Если передан один параметр s и он является последовательностью, то возвращается минимальный элемент последовательности, если передано несколько параметров, то возвращается наименьшее из них.
Конвертирует целое число в строку из восьмеричных цифр. Будьте осторожнее при переводе отрицательных чисел, так как сложно угадать, как такие строки будут интерпретированы на других машинах, с иной длиной слова. Например, -1 на 32-х разрядной машине в восьмеричной форме равно 037777777777, а на 16-и разрядной системе такая строка вовсе не равна -1.
open(filename[, mode[, bufsize]])
Аналогично file(), но работает на всех версиях Питона.
Возвращает числовое значение строки из одного символа согласно таблице ASCII или символа unicode: ord(‘a’) возвратит 97, ord(u’u2020′) – 8224.
Возвращает x возведённый в степень y , если присутствует число z, то возвращается значение pow(x, y) % z. Возвращаемое значение имеет тот же тип, что и x и y, но если y отрицательное, то результат будет с точкой 10**-2 = 0.01
range([start,] stop[, step])
Возвращает арифметическую прогрессию от start до stop с шагом step . По умолчанию start равно 0, а step = 1, нельзя задавать step равный нулю, это вызовет исключение ValueError. Примеры использования:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[0, 5, 10, 15, 20, 25]
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
Вводит с клавиатуры строку до символа перевода строки. Перед вводом печатает подсказку prompt. Если при вводе встречается символ конца файла EOF, то возбуждается исключение EOFError.
reduce(function, sequence[, initializer])
Возвращает единственное значение, являющееся выполнением пользовательской функции над первыми двумя элементами списка, затем с результатом выполнения функции и следующим элементом списка, например программа считает сумму всех чисел от 1 до 10:
>>> def add(x,y): return x+y
>>> reduce(add, range(1, 11))
Если в списке только один элемент, возвращается его значение, если список пустой, возникает исключительная ситуация. Если вы хотите, чтобы в случае пустого списка возвращалось какое-либо значение по умолчанию, то передайте его в качестве третьего аргумента функции reduce.
Возвращает строку, содержащую представление object для печати. Основная задача функции – формирование строки для использования в функции eval().
Возвращает округлённое значение x. Округление выполняется по математическим правилам(round(0.5) = 1.0, а round(-0.5) = -1.0). Если указано число n то округление ведется до n десятичных знаков. По умолчанию n=0.
Возвращает строку, содержащую представление object для печати. Функция расставляет или убирает кавычки, то есть выполняет оформление объекта. Основное отличие от функции repr() в том, что данная функция формирует строку для человеческого восприятия, а не для eval().
Возвращает константный список с элементами входящими в последовательность sequence, т.е осуществляет преобразование последовательности в константный список. Если функции передан константный список, то она возвращает его без изменений.
Возвращает тип объекта. Все встроенные типы определены в модуле types:
>>> if type(x) == types.StringType: print «Это строка»
Возвращает строку из одного символа, который соответствует числовому значению i и находится в промежутке от 0 до 65535, например, unichr(97) вернёт символ u’a’. Функция unichr(i) противоположна ord(ui)
Возвращает словарь из всех объектов оbject. По умолчанию используется текущая локальная область действия. Для модуля возвращается значение внутренней переменной __dict__. Словарь, возвращаемый данной функцией не должен модифицироваться.
Функция Eval
Функция Eval используется для оценки выражение, которая приводит к в виде текстовой строки или числового значения.
Вы можете составить строку и передать ее функции Eval точно так же, как если бы эта строка была настоящим выражением. Функция Eval вычисляет строковое выражение и возвращает его значение. Например, Eval(«1 + 1») возвращает 2.
Если в функцию Eval передать строку, содержащую имя другой функции, функция Eval вернет значение, возвращаемое этой функцией. Например, Eval(«Chr$(65)») возвращает значение «A».
Eval ( строковое_выражение )
Аргумент строковое_выражение — это выражение, результатом вычисления которого является строка, состоящая из букв и цифр. В качестве строкового_выражения можно, например, указать функцию, которая возвращает строку или числовое значение. В других случаях это может быть ссылка на элемент управления формы. Аргумент строковое_выражение должен в результате вычисления давать строковое или числовое значение; его результатом не может быть объект объект Microsoft Access.
Примечание: В примерах ниже показано, как использовать эту функцию в модуле Visual Basic для приложений (VBA). Чтобы получить дополнительные сведения о работе с VBA, выберите Справочник разработчика в раскрывающемся списке рядом с полем Поиск и введите одно или несколько слов в поле поиска.
Примечание: Если вы указываете в аргументе строковое_выражение функции Eval имя другой функции, необходимо ставить после него в скобки. Например:
‘ ShowNames is user-defined function.
Debug.Print Eval(«ShowNames()»)
Debug.Print Eval(«StrComp(«»Joe»»,»»joe»», 1)»)
Замечания
Функцию Eval можно использовать в вычисляемый элемент управления в форме, отчете, макросах или модулях. Функция Eval возвращает variant, который является строкой или числом.
Аргументом строковое_выражение должно быть выражение, сохраненное в строке. Если функции Eval передать строку, которая содержит только текст, а не числовое выражение или имя функции, возникнет ошибка во время выполнения. Например, выполнение функции Eval(«Smith») приведет к ошибке.
С помощью функции Eval можно определить значение, хранящееся в свойстве Значение элемента управления. В следующем примере в функцию Eval передается строка, содержащая полную ссылку на элемент управления. В диалоговом окне будет отображаться текущее значение элемента управления.
Dim ctl As Control
Dim strCtl As String
Set ctl = Forms!Employees!LastName
strCtl = «Forms!Employees!LastName»
MsgBox («The current value of » & ctl.Name & _
» is » & Eval(strCtl))
Функция Eval дает возможность применять операторы выражений, недопустимые в модулях Visual Basic для приложений (VBA). Например, в коде программы нельзя использовать непосредственно операторы SQL Between. And или In, но их можно использовать в выражении, передаваемом в функцию Eval.
В следующем примере определяется, является ли значение элемента управления ShipRegion (Регион доставки) в форме Orders (Заказы) одним из заданных кодов регионов. Если поле содержит одно из таких обозначений, переменная intState примет значение True (-1). Обратите внимание, что для включения одной строки в другую нужно использовать одинарные кавычки (‘).
Dim intState As Integer
intState = Eval(«Forms!Orders!ShipRegion In » _
& «(‘AK’, ‘CA’, ‘ID’, ‘WA’, ‘MT’, ‘NM’, ‘OR’)»)
Примеры запросов
SELECT Eval(«15+3») AS Expr1 FROM ProductSales GROUP BY Eval(«15+3»);
Вычисляет строковую величину и результат. Результат: 18.
SELECT Eval(«Date()+month(date()))») AS NewDate FROM ProductSales Group by Eval(«Date()+month(date())»);
Оценивает строковую величину, определяет функции и выполняет их. Результат: текущая системная дата + текущий месяц, отображаемая в столбце NewDate.
Примеры VBA
В следующем примере предполагается, что имеется 50 функций, обозначенных A1, A2 и т. д. Функция Eval используется для последовательного вызова этих функций.
Sub CallSeries()
Dim intI As Integer
For intI = 1 To 50
Eval(«A» & intI & «()»)
Next intI
End Sub
В следующем примере событие «Щелкните» активируется так же, как если бы пользователь нажал кнопку в форме. Если значение свойства OnClick кнопки начинается со знака равной (=), то есть это имя функции, функция Eval вызывает функцию, что эквивалентно запуску события Click. Если значение не начинается со знака равно, ему необходимо назвать макрос. Метод RunMacro объекта DoCmd выполняет именуемый макрос.
Dim ctl As Control
Dim varTemp As Variant
Set ctl = Forms!Contacts!HelpButton
If (Left(ctl.OnClick, 1) = » ocArticleFooterShareContainer»>
Что делает метод eval python?
Функция eval() анализирует переданную ей строку и если строка окажется кодом, то он будет выполнен:
x = 'print(55)' eval(x) # => 55 x = '4 + 7' print(eval(x)) # => 11 x = '2 > 11' print(eval(x)) # => False
Но стоит с большой осторожностью пользоваться этой функцией и уж точно ни в коем случае нельзя передавать ей данные, которые может ввести пользователь. Функция eval() выполнит любой код, который сможет распознать и если, допустим, ей передать строку rm -rf / , то корневая директория (если говорим о Linux) будет удалена без всяких вопросов и предостережений. Поэтому следует помнить о том, что пользоваться этой функцией надо с осторожностью и не предоставлять ей данные, вводимые пользователем.
