2017-12-28 8 views
1

Ich bemerkte, dass nach Aufruf init_printing Methode sympy, Variable Darstellung eine bessere visuelle ansprechend haben. Ich weiß, dass das in der Regel repro-Methode erbt.Sympy __repr__ Magie - Wie funktioniert es?

Aber wenn ich __repr__ Methode aufrufen, ist das Ergebnis anders. Warum?

Bevor init_printing genannt wird, dies ist das Ergebnis:

>>> import sympy as sy 
>>> x = sy.Symbol('x') 
>>> sy.exp(x) 
exp(x) 

>> sy.exp(x).__repr__() 
'exp(x)' 

Nach init_printing genannt wird, ist dies das Ergebnis:

>>> import sympy as sy 
>> sy.init_printing() 
>>> x = sy.Symbol('x') 
>>> sy.exp(x) 
x 
e 

>> sy.exp(x).__repr__() 
'exp(x)' 

Warum die repr Methode gibt nicht die gleichen Wie bewertet man die Repräsentation der Variablen?

>>> sy.exp(x).__repr__ 
<bound method Basic.__repr__ of exp(x)> 

Antwort

3

Diese Funktion eine benutzerdefinierte sys.displayhook() function, installiert, die in den interaktiven Interpreter verwendet wird, um das Ergebnis von Ausdrücken echo:

sys.displayhook auf dem Ergebnis der Auswertung eines Ausdrucks in einer interaktiven Python-Session eingegeben aufgerufen wird . Die Anzeige dieser Werte kann angepasst werden, indem sys.displayhook eine weitere Einargumentfunktion zugewiesen wird.

Die Umsetzung wird in den sympy.interactive.printing module gefunden:

def _init_python_printing(stringify_func, **settings): 
    """Setup printing in Python interactive session. """ 
    import sys 
    from sympy.core.compatibility import builtins 

    def _displayhook(arg): 
     """Python's pretty-printer display hook. 
      This function was adapted from: 
      http://www.python.org/dev/peps/pep-0217/ 
     """ 
     if arg is not None: 
      builtins._ = None 
      print(stringify_func(arg, **settings)) 
      builtins._ = arg 

sys.displayhook = _displayhook 

Mit anderen Worten, das nichts mit dem zu tun hat, wie die Objekte __repr__ implementieren.

+0

Wusste nicht über Existenz von sys.displayhook. Vielen Dank. –