我可以配置python以使matlab像print一样,这样当我只有一个函数时
returnObject()
它只是打印那个对象而我不必在它周围打印?我认为这并不容易,但是如果某个对象没有受到其他var的约束,那么应该打印它,这样就可以了。
a = 5 #prints nothing
b = getObject() #prints nothing
a #prints 5
b #prints getObject()
getObject() #prints the object
答案 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()