Maison >développement back-end >Tutoriel Python >Fonction intégrée Python——eval

Fonction intégrée Python——eval

黄舟
黄舟original
2017-01-19 16:39:351667parcourir

Fonction intégrée Python - eval

eval

evaleval(expression [, globals [, locals]])

Cette fonction est utilisée pour exécuter dynamiquement une chaîne d'expression ou compiler une fonction de compilation L'objet code ça sort.
Le paramètre expression est une chaîne d'expression, ou le nom de l'objet de code compilé ;
Le paramètre globals est l'espace de noms global, qui peut spécifier la portée de la portée globale lors de l'exécution de l'expression. les modules peuvent utiliser.
Si ce paramètre est défini par défaut, l'espace de noms global actuel qui appelle actuellement cette fonction sera utilisé ;
Le paramètre locals est l'espace de noms de portée locale, qui est utilisé pour spécifier l'espace de noms local accessible lors de l'exécution de l'expression.
Si le paramètre d'espace de noms global apparaît, mais que le module intégré par défaut est utilisé, le module sera automatiquement copié dans l'espace de noms global
Cela signifie que peu importe la façon dont il est défini, le module intégré peut. être utilisé.
Si les deux espaces de noms utilisent la méthode par défaut, l'espace de noms lors de l'appel de cette fonction sera utilisé pour trouver la variable correspondante.
Pourquoi utiliser cette fonction ?
La raison de cette fonction devrait être la différence entre les langages dynamiques et les langages compilés
Parce qu'il est fondamentalement impossible de générer dynamiquement du code dans les langages compilés
Mais les langages dynamiques le peuvent. signifie que le logiciel a été déployé sur le serveur,
mais tant qu'il y a très peu de changements, il faut modifier directement cette partie du code, et les changements peuvent être implémentés immédiatement sans recharger l'intégralité du logiciel.
Une autre fonction peut être utilisée en apprentissage automatique.
Par exemple, selon la fréquence et la méthode d'utilisation du logiciel, le code peut être modifié dynamiquement pour s'adapter aux changements de l'utilisateur.
En y réfléchissant, a-t-il la capacité vitale de mettre à jour automatiquement le code et d'améliorer ses progrès
S'il effectue des actions destructrices, il s'agit en fait d'un virus.
>>> eval('1 1')
2

#全局命名空间为空,使用局部命名空间
>>> def make_fn(code):
    import math
    ALLOWED_LOCALS = {v:getattr(math,v)
              for v in filter(
                  lambda x: x.startswith('_'),dir(math))
              }
    return eval('lambda x: %s'%code ,None,ALLOWED_LOCALS)
>>> f = make_fn('x+1')
>>> print f(2)

3

#使用全局命名空间
>>> def make_fng(code):
    import math
    ALLOWED = {v:getattr(math, v)
           for v in filter(lambda x: not x.startswith('_'), dir(math))
   }
    ALLOWED['__builtins__'] = None
    return eval('lambda x: %s' % code, ALLOWED, {})
>>> f = make_fng('cos(x)')
>>> print f(9)
-0.911130261885
>>> f = make_fng('cos(x*x)')
>>> print f(9)
0.776685982022

Ceux ci-dessus sont construits en Python -in fonctions ——Le contenu d'eval, veuillez faire attention au site Web PHP chinois (www.php.cn) pour plus de contenu connexe !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn