在Python中将print输出赋值给变量
我想知道怎么把打印出来的结果赋值给一个变量。
比如说,如果
mystring = "a=\'12\'"
那么
print mystring
a=12
我想把这个结果像 **kwargs 一样传递,
test(mystring)
我该怎么做呢?
再多解释一下:我有一个字符串列表,是从数据文件的注释行中得到的。它看起来像这样:
"a='0.015in' lPrime='0.292' offX='45um' offY='75um' sPrime='0.393' twistLength='0'",
"a='0.015in' lPrime='0.292' offX='60um' offY='75um' sPrime='0.393' twistLength='0'",
"a='0.015in' lPrime='0.292' offX='75um' offY='75um' sPrime='0.393' twistLength='0'",
'']
我想把这些值放进某种结构里,这样我就可以把不同的东西和任何变量进行对比,所以这个列表基本上就是一个图例,我想把这些轨迹的函数和图例中的变量进行绘图。
所以如果我每个条目都有一个轨迹,我可能想要绘制 max(trace) 和 offX 之间的关系,针对一系列的 a 值。
我最初的想法是把这些字符串作为 **kwargs 传递给一个函数,这个函数会生成一个对应数据的矩阵。
6 个回答
2
你可以在Python对象上使用__str__
和__repr__
这两个方法来获取它们的字符串表示(这两个方法之间有一点小区别,具体可以查阅文档)。实际上,print
在内部就是通过这些方法来实现的。
6
如何重定向 stdout
并把输出捕获到一个对象里呢?
import sys
# a simple class with a write method
class WritableObject:
def __init__(self):
self.content = []
def write(self, string):
self.content.append(string)
# example with redirection of sys.stdout
foo = WritableObject() # a writable object
sys.stdout = foo # redirection
print "one, two, three, four" # some writing
然后只需要从 foo.content
中取出“输出”,然后随便处理就可以了。
如果我理解错了你的需求,请忽略这段话。
0
我个人不会这样做。一个更简单、更不麻烦的办法是先从你的数据中构建一个字典,然后把整个字典作为 **kwargs
传递给一个函数。例如(这不是最优雅的做法,但可以帮助理解):
import re
remove_non_digits = re.compile(r'[^\d.]+')
inputList = ["a='0.015in' lPrime='0.292' offX='45um' offY='75um' sPrime='0.393' twistLength='0'",
"a='0.015in' lPrime='0.292' offX='60um' offY='75um' sPrime='0.393' twistLength='0'",
"a='0.015in' lPrime='0.292' offX='75um' offY='75um' sPrime='0.393' twistLength='0'", '']
#remove empty strings
flag = True
while flag:
try:
inputList.remove('')
except ValueError:
flag=False
outputList = []
for varString in inputList:
varStringList = varString.split()
varDict = {}
for aVar in varStringList:
varList = aVar.split('=')
varDict[varList[0]] = varList[1]
outputList.append(varDict)
for aDict in outputList:
for aKey in aDict:
aDict[aKey] = float(remove_non_digits.sub('', aDict[aKey]))
print outputList
这段代码会输出:
[{'a': 0.014999999999999999, 'offY': 75.0, 'offX': 45.0, 'twistLength': 0.0, 'lPrime': 0.29199999999999998, 'sPrime': 0.39300000000000002}, {'a': 0.014999999999999999, 'offY': 75.0, 'offX': 60.0, 'twistLength': 0.0, 'lPrime': 0.29199999999999998, 'sPrime': 0.39300000000000002}, {'a': 0.014999999999999999, 'offY': 75.0, 'offX': 75.0, 'twistLength': 0.0, 'lPrime': 0.29199999999999998, 'sPrime': 0.39300000000000002}]
看起来正是你想要的结果。