[英]Sympy __repr__ magic - How does it work?
我注意到在調用init_printing
方法之后,變量的表示具有更好的視覺吸引力。 我知道這通常是繼承repr方法。
但是當我調用__repr__
方法時,結果是不同的。 為什么?
在init_printing
之前,結果如下:
>>> import sympy as sy
>>> x = sy.Symbol('x')
>>> sy.exp(x)
exp(x)
>> sy.exp(x).__repr__()
'exp(x)'
調用init_printing
后,結果如下:
>>> import sympy as sy
>> sy.init_printing()
>>> x = sy.Symbol('x')
>>> sy.exp(x)
x
e
>> sy.exp(x).__repr__()
'exp(x)'
為什么repr方法不會像評估變量的表示一樣返回?
>>> sy.exp(x).__repr__
<bound method Basic.__repr__ of exp(x)>
該函數安裝一個自定義的sys.displayhook()
函數 ,該函數在交互式解釋器中用於回顯表達式的結果:
在評估在交互式Python會話中輸入的表達式的結果上調用
sys.displayhook
。 可以通過為sys.displayhook
指定另一個單參數函數來自定義這些值的顯示。
該實現可在sympy.interactive.printing
模塊中找到:
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__
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.