Heim  >  Artikel  >  Backend-Entwicklung  >  Integrierte Python-Funktion – eval

Integrierte Python-Funktion – eval

黄舟
黄舟Original
2017-01-19 16:39:351640Durchsuche

In Python integrierte Funktion - eval

eval

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

Diese Funktion wird verwendet, um eine Ausdruckszeichenfolge dynamisch auszuführen oder eine Kompilierungsfunktion zu kompilieren Das Codeobjekt das kommt raus.
Der Parameter Ausdruck ist eine Ausdruckszeichenfolge oder der Name des kompilierten Codeobjekts
Der Parameter Globals ist der globale Namespace, der beim Ausführen des Ausdrucks den Umfang des globalen Bereichs angeben kann welche Module genutzt werden können.
Wenn dieser Parameter standardmäßig verwendet wird, wird der aktuelle globale Namespace verwendet, der diese Funktion derzeit aufruft.
Der Parameter locals ist der lokale Bereichsnamespace, der verwendet wird, um den lokalen Namespace anzugeben, auf den beim Ausführen des Ausdrucks zugegriffen wird.
Wenn der globale Namespace-Parameter angezeigt wird, aber das standardmäßige integrierte Modul verwendet wird, wird das Modul automatisch in den globalen Namespace kopiert.
Das bedeutet, dass das integrierte Modul dies unabhängig von seiner Einstellung tun kann verwendet werden.
Wenn beide Namespaces die Standardmethode verwenden, wird beim Aufrufen dieser Funktion der Namespace verwendet, um die entsprechende Variable zu finden.
Warum diese Funktion verwenden?
Der Grund für diese Funktion sollte der Unterschied zwischen dynamischen Sprachen und kompilierten Sprachen sein.
Denn es ist grundsätzlich unmöglich, Code in kompilierten Sprachen zu generieren bedeutet, dass die Software auf dem Server bereitgestellt wurde,
aber solange es nur sehr wenige Änderungen gibt, müssen Sie diesen Teil des Codes direkt ändern, und die Änderungen können sofort implementiert werden, ohne die gesamte Software neu laden zu müssen.
Darüber hinaus kann diese Funktion beim maschinellen Lernen verwendet werden
Zum Beispiel kann der Code je nach Häufigkeit und Art der Verwendung der Software dynamisch geändert werden, um sich an Benutzeränderungen anzupassen.
Wenn man darüber nachdenkt: Verfügt es über die Fähigkeit, den Code selbst zu aktualisieren und einen besseren Fortschritt zu erzielen?
Wenn es destruktive Aktionen ausführt, handelt es sich tatsächlich um einen 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
Das Obige ist das Integrierte Python-Funktion – Inhalte auswerten. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn