在Python中将print输出赋值给变量

2 投票
6 回答
13318 浏览
提问于 2025-04-15 19:39

我想知道怎么把打印出来的结果赋值给一个变量。

比如说,如果

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}]

看起来正是你想要的结果。

撰写回答