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的问题,而是为寻找类似问题答案的人们提供有用的资源。很明显,对于许多人来说,这个答案解决了他们的问题,所以称这个答案“没有用”(通过否决票的方式)似乎有点牵强。