如何在python中实现这一目标?

时间:2010-09-08 23:49:57

标签: python

给出以下输入文件:

a = 2
b = 3
c = a * b
d = c + 4

我想通过生成的python程序运行上面的输入文件 以下输出:

a = 2
b = 3
c = a * b = 6
d = c + 4 = 10

输入文件是合法的python程序,但输出是python with 额外输出,将每个变量的值打印到右侧 声明/分配。或者,输出可能如下所示:

a = 2
b = 3
c = a * b
c = 6
d = c + 4
d = 10

这样做的动机是实现一个简单的“工程师的笔记本” 允许计算链而不需要打印语句 在源文件中。

这是修改D.Shawley(非常感谢)贡献后的所得:

#! /usr/bin/env python

from math import *

import sys
locals = dict()

for line in sys.stdin:
  line = line.strip()
  if line == '':
    continue
  saved = locals.copy()
  stmt = compile(line,'<stdin>','single')
  eval(stmt,None,locals)
  print line,
  for (k,v) in locals.iteritems():
    if k not in saved:
      print '=', v,
  print

1 个答案:

答案 0 :(得分:0)

以下是一个好的开始。它不是非常Pythonic,但它非常接近。它不区分新添加的变量和修改过的变量。

#! /usr/bin/env python
import sys
locals = dict()
for line in sys.stdin:
    saved = locals.copy()
    stmt = compile(line, '<stdin>', 'single')
    eval(stmt, None, locals)
    print line.strip(),
    for (k,v) in locals.iteritems():
        if k not in saved:
            print '=', v,
    print