2017-12-28 18 views
1

sympy의 init_printing 메서드를 호출 한 후 변수의 표현이 더 시각적으로 매력적이라는 것을 알게되었습니다. 나는 그것이 일반적으로 repr 메소드를 상속받은 것으로 알고있다.Sympy __repr__ 마법 - 어떻게 작동합니까?

그러나 __repr__ 메서드를 호출하면 결과가 달라집니다. 왜? 호출되는 init_printing 전에

, 이것은 결과 : init_printing

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

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

가 호출되고,이 결과 :

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

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

에 repr 방법은 동일을 반환하지 않는 이유 변수의 표현을 평가하는 것으로?

기능은 표현의 결과 반향 대화 형 인터프리터에 사용되는 사용자 정의 sys.displayhook() function, 설치 그건
>>> sy.exp(x).__repr__ 
<bound method Basic.__repr__ of exp(x)> 

답변

3

: 대화 형 파이썬 세션에 입력 식의 계산 결과에라고

sys.displayhook을 . 이 값의 표시는 다른 하나의 인수 함수를 sys.displayhook에 지정하여 사용자 정의 할 수 있습니다.

구현은 sympy.interactive.printing module에서 발견된다 :

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 

즉,이 개체가 __repr__을 구현하는 방법과는 아무 상관이 없습니다.

+0

sys.displayhook가 있는지 여부를 몰랐습니다. 고맙습니다. –