Tudo que você precisa saber sobre Eval em Python



Este artigo fornecerá a você um conhecimento detalhado e abrangente de Eval em Python, suas desvantagens e usos com exemplos.

Onde quer que você olhe ao seu redor, você encontrará um aplicativo que foi criado especificamente para atender às suas necessidades. Embora existam muitas linguagens de programação que podem ser usadas para desenvolver esses aplicativos, a maioria deles é construída usando . O Python, juntamente com seus excelentes recursos e maior versatilidade, traz à mesa ofertas exclusivas que são poderosas e extremamente úteis em todos os momentos. Neste artigo de avaliação em Python, discutiremos os seguintes pontos:

O que é Eval em Python?

A função eval em Python é uma das opções mais interessantes que existem. Alguns chamam de hack e alguns chamam de atalho, mas de qualquer maneira você pode fazer uso dele para executar um programa Python dentro de um código Python. Muito legal, certo?





Quando você usa a função eval, basicamente está solicitando que o interpretador execute o que está dentro do colchete da função eval.

PythonLogo- Eval em PythonA sintaxe para usar a função eval em Python é:



eval (expressão, globais = Nenhum, locais = Nenhum)

Na sintaxe acima,

  1. Expressão: É a string ou parte do código que é analisada e avaliada como uma expressão Python dentro do próprio programa Python.



  2. Global: É o dicionário que serve para definir todos os métodos globais disponíveis para executar a expressão mencionada acima. Esta é uma entidade opcional e seus usos dependem de sua necessidade.

  3. Locais: Semelhante aos globais, este é outro dicionário usado para especificar os métodos locais disponíveis, bem como as variáveis.

Para entender melhor o uso desta função, dê uma olhada no exemplo abaixo.

from math import * def secret_function (): return 'A chave secreta é 1234' def function_creator (): # expressão a ser avaliada expr = raw_input ('Digite a função (em termos de x):') # variável usada na expressão x = int (raw_input ('Insira o valor de x:')) # expressão de avaliação y = eval (expr) # impressão do resultado avaliado print ('y = {}'. format (y)) if __name__ == '__main__': function_creator ()

No exemplo acima, function_creator é uma função que irá avaliar as expressões matemáticas criadas pelo usuário quando o programa é executado.

Resultado:

Insira a função (em termos de x): x * (x + 1) * (x + 2)

Insira o valor de x: 3

y = 60

Análise

Agora que você viu o código compartilhado acima, vamos analisá-lo um pouco mais.

  1. A função acima terá qualquer variável na expressão x como sua entrada.

  2. Uma vez executado, o usuário será solicitado a inserir um valor para x, somente após o qual o resultado para o programa será gerado.

  3. Finalmente, o programa Python executará a função eval analisando oexprcomo um argumento.

Desvantagens de Eval

Semelhante a outras funções integradas do Python, eval também vem com algumas desvantagens que podem criar um problema se não forem contabilizadas.

Se você observar o exemplo acima, uma das principais vulnerabilidades da função, function_creator, é que ela pode expor quaisquer valores ocultos dentro do programa e também chamar uma função prejudicial, já que eval por padrão executará qualquer coisa que esteja entre seus parênteses.

Para entender isso melhor, dê uma olhada no exemplo abaixo.

Entrada do usuário

Insira a função (em termos de x): secret_function ()

o que um scanner faz em java

Insira o valor de x: 0

Resultado:

y = a chave secreta é 1234

Outra situação perigosa que vem com o uso da função eval é importar o módulo os. Depois de importar o módulo os, ele permite que o Python leia e grave quaisquer arquivos presentes em seu sistema nativo sem autenticação do usuário. Nesse caso, se você digitar errado um únicolinha de código, todos os seus arquivos nativos podem ser excluídos.

A solução para todas essas desvantagens está em restringir os recursos da função eval.

Tornando Eval Seguro em Python

Por padrão, o Eval vem com a opção de analisar qualquer função a que tenha acesso ou que já tenha sido definida. Manter isso em mente ao escrever seu código limitará os recursos de eval em uma extensão considerável, garantindo que nada dê errado.

Para entender melhor esse conceito, dê uma olhada no exemplo abaixo.

from math import * def secret_function (): return 'A chave secreta é 1234' def function_creator (): # expressão a ser avaliada expr = raw_input ('Digite a função (em termos de x):') # variável usada na expressão x = int (raw_input ('Insira o valor de x:')) # passando a variável x no dicionário seguro safe_dict ['x'] = x # expressão de avaliação y = eval (expr, {'__builtins __': None}, safe_dict) # printing resultado avaliado print ('y = {}'. format (y)) if __name__ == '__main__': # lista de métodos seguros safe_list = ['acos', 'asin', 'atan', 'atan2', 'ceil ',' cos ',' cosh ',' degrees ',' e ',' exp ',' fabs ',' floor ',' fmod ',' frexp ',' hipot ',' ldexp ',' log ', 'log10', 'modf', 'pi', 'pow', 'radianos', 'sin', 'sinh', 'sqrt', 'tan', 'tanh'] # criando um dicionário de métodos seguros safe_dict = dict ([(k, locals (). get (k, None)) para k em safe_list]) function_creator ()

Entrada do usuário

Insira a função (em termos de x): secret_function ()

Insira o valor de x: 0

Resultado:

NameError: o nome 'secret_function' não foi definido

Como você pode ver, ao limitar o acesso de eval, as chances de uma saída errada que pode ser prejudicial foram negadas.

Usos de Eval

Conforme explicado nas seções acima, devido a vários motivos de segurança, eval não é tão comumente usado. Mesmo assim, há casos de uso específicos em que o uso de eval prova ser útil. Algumas das mais significativas são.

  1. Se você deseja que o usuário insira seus próprios scriptlets para modificar a saída do programa, o uso da função eval será útil.

  2. Ao escrever expressões para resolver questões matemáticas, você pode usar eval, pois é muito mais fácil do que escrever um analisador de expressões.

Agora que você sabe tudo sobre eval, esperamos que faça uso do mesmo em sua programação do dia a dia, tendo em mente as vantagens e as desvantagens.

Com isso, chegamos ao fim deste artigo de avaliação em Python. Para obter conhecimento aprofundado sobre Python e seus vários aplicativos, você pode para treinamento online ao vivo com suporte 24 horas por dia, 7 dias por semana e acesso vitalício.

Tem alguma questão para nós? Mencione-os na seção de comentários de “Avaliação em Python” e entraremos em contato com você.