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

Python:将打印输出分配给变量,python,function,unix,variables,Python,Function,Unix,Variables,我想知道如何将print函数(或任何函数)的输出分配给变量。举个例子: import eyeD3 tag = eyeD3.Tag() tag.link("/some/file.mp3") print tag.getArtist() 如何将print tag.getArtist的输出分配给变量 somevar = tag.getArtist() Python中的print语句将其参数转换为字符串,并将这些字符串输出到stdout。要将字符串保存为变量,请仅将其转换为字符串: a = str(t

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

import eyeD3
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
print tag.getArtist()
如何将
print tag.getArtist
的输出分配给变量

somevar = tag.getArtist()

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

a = str(tag.getArtist())

您可能需要一个
str
repr
unicode
函数

somevar = str(tag.getArtist())

根据您使用哪个python shell来回答更一般的问题
如何将标准输出重定向到变量?

请执行以下操作:

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
如果只需要在某些功能中执行此操作,请执行以下操作:

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

请注意,我是基于Python3.x写这个答案的。不用担心,您可以像这样将语句分配给变量

var=print('some text') 一些文本 >>>变量 >>>类型(变量) 根据文件,

所有非关键字参数都转换为字符串(如DO),并写入流中,由sep分隔,后跟end。sep和end都必须是字符串;它们也可以是
None
,这意味着使用默认值。如果没有对象,print()将只写end

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

这就是为什么我们不能给变量赋值。在这个问题中,您必须询问
(或任何函数)
。还有一个返回值为
None
的函数。因此的返回值为
None
。但是您可以调用函数(带括号())并以这种方式保存返回值

var=some_函数() 因此
var
变量的返回值为
some_function()
或默认值
None
。根据有关的文档,
所有非关键字参数都会像str()一样转换为字符串并写入流
。让我们来看看内部发生了什么

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

我们得到一个string对象,然后你可以修改下面的代码行,如下所示

var=str(一些函数()) 或者,如果你真的有一个对象,你也可以使用

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

变化如下:

>>var=''.join(some_function())#如果某个_function()确实返回字符串值,则可以使用此选项

这是一个独立的示例,展示了如何在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)

我相信OP需要对象的字符串表示。不要把这个问题看得太字面。不需要使用
str
@eumiro:您有证据证明函数不返回字符串吗?您有证据证明函数确实返回字符串吗?转换为字符串不会有什么坏处。老实说,我相信你的答案正是OP想要的:)事实上,在某些情况下,转换为字符串会造成伤害。如果tag.getArtist()的值包含非ascii字符,例如
u'Elys\xe9e'
,这将不起作用。print语句将显示Elysée,但str()将抛出UnicodeEncodeError。@在Python 2中,这确实是正确的–Unicode字符串在打印时将使用
sys.stdout.encoding
进行编码。因此,您需要使用
u'Elys\xe9e'.encode(sys.stdout.encoding)
来获得与
print
所做操作等效的功能。在Python3中,您应该很少看到这个问题,因为Python3中的
str
是Unicode字符串类型,所以
str(u'Elys\xe9e')
将保持字符串不变。OP没有询问如何将字符串保存到另一个字符串,而是询问如何保存打印语句的输出。这个答案并没有回答这个问题。@sh37211 OP到底问了什么,这是有争议的,我同意你的解释比我的更可能。然而,StackOverflow的主要目的不是解决OP的问题,而是为寻找类似问题答案的人们提供有用的资源。很明显,对于许多人来说,这个答案解决了他们的问题,所以称这个答案“没有用”(通过否决票的方式)似乎有点牵强。