IPython魔术打印变量赋值

时间:2018-05-20 17:52:54

标签: python ipython

每次分配变量时,IPython中是否有参数打印变量?

目前:

In [1]: a = 5

In [2]: a
Out[2]: 5

In [3]: b = a + 1

In [4]: b
Out[4]: 6

在matlab中,除非在最后写一个;,否则打印变量,在ipython中我想用这样的魔术函数激活它:

In [1]: %printassignment

In [2]: a = 5
a = 5

In [3]: b = a + 1
b = 6

我可以写出自己的魔法,但我很确定这是一个标准的人会制作一个超级调整的标准功能。该功能对初学者特别有用。

2 个答案:

答案 0 :(得分:4)

从IPython 6.2开始,this exists,但打开它的命令真的很长:

%config InteractiveShell.ast_node_interactivity='last_expr_or_assign'

如果您希望默认设置为ipython_config.py,则可以在c.InteractiveShell.ast_node_interactivity = 'last_expr_or_assign' 中进行设置:

arr[i] = val

仅在分配目标是简单名称时触发; <{1}}或obj.attr = 3等作业不会自动打印。

答案 1 :(得分:0)

对于旧版本的IPython,请尝试以下操作……

from IPython.core.inputtransformer import InputTransformer
import re

class PrintAssignment(InputTransformer):
    def __init__(self):
        self.assignment = re.compile('^([a-z]+) =')
        self.most_recent_line = None
    def push(self, line):
        self.most_recent_line = line
        return line
    def reset(self):
        if not self.most_recent_line: return
        match = self.assignment.match(self.most_recent_line)
        self.most_recent_line = None
        if match: return match.group(1)

然后使用

注册此输入处理程序
ip = get_ipython()
ip.physical_line_transforms.append(PrintAssignment())