我可以配置python使matlab像打印?

时间:2017-06-12 15:13:37

标签: python matlab

我可以配置python以使matlab像print一样,这样当我只有一个函数时

returnObject()

它只是打印那个对象而我不必在它周围打印?我认为这并不容易,但是如果某个对象没有受到其他var的约束,那么应该打印它,这样就可以了。

a = 5 #prints nothing
b = getObject() #prints nothing
a #prints 5
b #prints getObject()
getObject() #prints the object

3 个答案:

答案 0 :(得分:0)

如果使用ipython笔记本,单个单元格就像这样工作。但是,您只能通过键入对象名称来查看每个单元格的一个对象。要查看多个对象,您需要调用print或使用大量单元格。

答案 1 :(得分:0)

您可以根据一组定义要打印的内容的规则编写脚本来修改原始脚本,然后运行修改后的脚本。

执行此操作的基本脚本是:

f = open('main.py', 'r')
p = open('modified.py', 'w')

p.write('def main(): \n')

for line in f:
    temp = line
    if len(temp) == 1:
        temp = 'print(' + line + ')'

    p.write('\t' + temp)

p.close()

from modified import main

main()

脚本main.py将如下所示:

x = 236
x

输出:

236

答案 2 :(得分:0)

思路如下:解析Python代码的AST,用调用print替换每个表达式,将表达式的内容替换为参数,然后运行修改后的版本。我不确定它是否适用于所有代码,但您可能会尝试。将其另存为matlab.py并将代码设为python3 -m matlab file.py

#!/usr/bin/env python3
import ast
import os
import sys

class PrintAdder(ast.NodeTransformer):
    def add_print(self, node):
        print_func = ast.Name("print", ast.Load())
        print_call = ast.Call(print_func, [node.value], [])
        print_statement = ast.Expr(print_call)
        return print_statement

    def visit_Expr(self, node):
        if isinstance(node.value, ast.Call) and node.value.func.id == 'print':
             return node
        return self.add_print(node)

def main():
    import argparse

    parser = argparse.ArgumentParser()
    parser.add_argument('infile', type=argparse.FileType(), nargs='?', default='-')
    args = parser.parse_args()

    with args.infile as infile:
        code = infile.read()

    file_name = args.infile.name

    tree = ast.parse(code, file_name, 'exec')
    tree = PrintAdder().visit(tree)
    tree = ast.fix_missing_locations(tree)

    bytecode = compile(tree, file_name, 'exec')
    exec(bytecode)

if __name__ == '__main__':
    main()