Python:将打印输出分配给变量

时间:2011-05-04 13:54:35

标签: python function unix variables

我想知道如何将print函数(或任何函数)的输出分配给变量。举个例子:

import eyeD3
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
print tag.getArtist()

如何将print tag.getArtist的输出分配给变量?

6 个答案:

答案 0 :(得分:21)

Python中的print语句将其参数转换为字符串,并将这些字符串输出到stdout。要将字符串保存到变量,只需将其转换为字符串:

a = str(tag.getArtist())

答案 1 :(得分:7)

可能您需要strreprunicode函数之一

somevar = str(tag.getArtist())

取决于您使用的是哪个python shell

答案 2 :(得分:5)

somevar = tag.getArtist()

http://docs.python.org/tutorial/index.html

答案 3 :(得分:1)

请注意,我根据 Python 3.x 撰写了此答案。不用担心,您可以将print()语句分配给这样的变量。

>>> var = print('some text')
some text
>>> var
>>> type(var)
<class 'NoneType'>

根据文档

  

所有非关键字参数都像str()一样转换为字符串,并写入流中,以sep分隔,然后以end分隔。 sep和end都必须是字符串;它们也可以是None,表示使用默认值。如果未提供任何对象,则print()只会写完。

     

file参数必须是具有write(string)方法的对象;如果它不存在或None,将使用sys.stdout。由于打印的参数将转换为文本字符串,因此print()不能与二进制模式文件对象一起使用。对于这些,请改用file.write(...)

这就是为什么我们不能为变量分配print()语句值的原因。在这个问题中,您要询问(or any function)。因此print()也是一个函数,其返回值带有None。因此,python function的返回值为None。但是您可以调用函数(带有括号())并以这种方式保存返回值。

>>> var = some_function()

因此var变量的返回值为some_function()或默认值为None。根据有关print()All non-keyword arguments are converted to strings like str() does and written to the stream的文档。让我们看看str()内部发生了什么。

  

返回string版本的对象。如果未提供object,则返回空字符串。否则,str()的行为取决于是否给出编码或错误,如下所示。

这样我们得到了一个字符串对象,那么您可以如下修改下面的代码行,

>>> var = str(some_function())

或者,如果您确实有str.join()对象,则可以使用string

  

返回一个字符串,该字符串是可迭代的字符串的串联。如果可迭代项中有任何非字符串值,包括TypeError对象,则会引发bytes。元素之间的分隔符是提供此方法的字符串。

更改可以如下,

>>> var = ''.join(some_function())  # you can use this if some_function() really returns a string value

答案 4 :(得分:1)

这是一个独立示例,展示了如何在 Python 3 中保存用户编写的函数的输出:

from io import StringIO
import sys

def print_audio_tagging_result(value):
    print(f"value = {value}")

tag_list = []
for i in range(0,1):
    save_stdout = sys.stdout
    result = StringIO()
    sys.stdout = result
    print_audio_tagging_result(i)
    sys.stdout = save_stdout
    tag_list.append(result.getvalue())
print(tag_list)

答案 5 :(得分:0)

更笼统地回答问题how to redirect standard output to a variable ?

执行以下操作:

from io import StringIO
import sys

result = StringIO()
sys.stdout = result
result_string = result.getvalue()

如果仅需要在某些功能中执行此操作,请执行以下操作:

old_stdout = sys.stdout  

# your function containing the previous lines
my_function()

sys.stdout = old_stdout