Maison >développement back-end >Tutoriel Python >Fonction intégrée Python——eval
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 !