2013-08-06 2 views
3

По умолчанию IPython, кажется, не отображать None значения:Дисплей None Значения в IPython

In [1]: x = 1 

In [2]: x 
Out[2]: 1 

In [3]: y = None 

In [4]: y 

Я часто в конечном итоге писать y is None, чтобы быть уверенным. Как настроить IPython, чтобы всегда показывать значение, даже если оно равно None?

ответ

7

Это преднамеренное, так как все выражения возвращают то, даже если это только None. Вы ничего не увидите , ноNone в вашем интерпретаторе.

Вы можете явно показать возвращаемое значение с repr() или str(), или путем печати (которая вызывает str() по результатам по умолчанию):

>>> y = None 
>>> repr(y) 
'None' 
>>> str(y) 
'None' 
>>> print repr(y) 
None 
>>> print y 
None 

print repr() будет ближе всего к тому, что интерпретатор делает, если результатом выражения является не None.

Обычный интерпретатор Python использует sys.displayhook() для отображения результатов выражения интерпретатора; интерпретатор IPython использует it's own hook to do this, но этот крючок явно игнорирует None.

Вы, конечно, можете использовать свою собственную обертку, следующие крючки делегат уже существующей крючок и всегда отображаешь None независимо:

import sys 

_chained_hook = sys.displayhook 
def my_displayhook(res): 
    _chained_hook(res) 
    if res is None: 
     sys.stdout.write('None\n') 

sys.displayhook = my_displayhook 
+0

Я был бы счастлив с заданиями, отображающими как 'None' (явно против неявный и весь этот джаз). Возможно ли сделать IPython? –

+0

Я считаю, что документация API IPython является довольно плотной и бесполезной; обычно вызывается функция 'sys.displayhook()', с которой перехватывает IPython с [trap trap] (http://ipython.org/ipython-doc/stable/api/generated/IPython.core.display_trap. html), presumabaly, который предоставляет крючки для изменения поведения там. –

+0

Обратите внимание, что присваивания не являются выражениями, они являются операторами, поэтому они ничего не отображают, поскольку нет возвращаемого значения. –

3

Использование print:

>>> y = None 
>>> print y 
None 
Смежные вопросы