我可以将python配置为类似matlab的打印吗?
我可以将python配置为类似于matlab的打印,以便在我只有一个函数时我可以将python配置为类似matlab的打印吗?,python,matlab,Python,Matlab,我可以将python配置为类似于matlab的打印,以便在我只有一个函数时 returnObject() 它只是打印那个对象而不需要我在它周围键入print?我假设这并不容易,但是如果一个对象没有被其他变量绑定,它应该被打印出来,这样就可以工作了 a = 5 #prints nothing b = getObject() #prints nothing a #prints 5 b #prints getObject() getObject() #prints the object 如果你使用
returnObject()
它只是打印那个对象而不需要我在它周围键入print?我假设这并不容易,但是如果一个对象没有被其他变量绑定,它应该被打印出来,这样就可以工作了
a = 5 #prints nothing
b = getObject() #prints nothing
a #prints 5
b #prints getObject()
getObject() #prints the object
如果你使用ipython笔记本电脑,每个电池都是这样工作的。但通过键入对象名称,每个单元格只能查看一个对象。要查看多个对象,您需要调用print,或使用大量单元格。您可以编写一个脚本,根据一组定义打印内容的规则修改原始脚本,然后运行修改后的脚本 执行此操作的基本脚本是:
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
其思想如下:解析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()
我认为这不可能在代码级别实现,因为该语言是专门为识别特定类型的语句而构建的。您是否尝试过IPython Terminal(而不是notebook)?我认为Python调试器可能会执行类似的操作。这不是你想要的答案,但可能不会太远。正如下面提到的,我发现ipython笔记本非常笨重。它又慢又慢。我不知道这是pycharms的错还是ipythons的错,但我还没有找到解决这些问题的好办法。所以我在寻找更好的。嗯,很接近,但不是我想要的。我发现笔记本电脑有点笨重,需要所有的设置。至少pycharmAnd的速度有点慢,那么包含一个无意义字符的多行docstring呢?它们肯定也会在matlab中打印出来吗?你只需要适当地设置规则。e、 g.如果您愿意,也可以让行以分号结束以抑制输出。看起来与我的想法完全一样,明天将尝试。@Hakaishin同样,如果您使用Python 2,这可能需要修改一点。