[英]Python: Assign print output to a variable
我想知道如何将print
function (或任何函数)的 output 分配给变量。 举个例子:
import eyeD3
tag = eyeD3.Tag()
tag.link("/some/file.mp3")
print tag.getArtist()
如何将print tag.getArtist
的 output 分配给变量?
Python 中的print
语句将其 arguments 转换为字符串,并将这些字符串输出到标准输出。 要将字符串保存到变量中,只需将其转换为字符串:
a = str(tag.getArtist())
要更笼统地回答这个问题, how to redirect standard output to a variable?
请执行下列操作:
from io import StringIO
import sys
result = StringIO()
sys.stdout = result
result_string = result.getvalue()
如果您只需要在某些 function 中执行此操作,请执行以下操作:
old_stdout = sys.stdout
# your function containing the previous lines
my_function()
sys.stdout = old_stdout
可能您需要str
、 repr
或unicode
函数之一
somevar = str(tag.getArtist())
取决于您使用的是哪个 python shell
somevar = tag.getArtist()
这是一个独立示例,展示了如何在 Python 3 中保存用户编写的 function 的 output:
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)
Output
['value = 0\n']
请注意,我根据Python 3.x
写了这个答案。 不用担心,您可以像这样将print()
语句分配给变量。
>>> var = print('some text')
some text
>>> var
>>> type(var)
<class 'NoneType'>
根据文件,
所有非关键字 arguments 都会像
str()
那样转换为字符串,并写入 stream,以 sep 分隔,后跟 end。 sep 和 end 都必须是字符串; 它们也可以是None
,这意味着使用默认值。 如果没有给出对象, print() 将只写 end。文件参数必须是带有
write(string)
方法的 object; 如果它不存在或None
,将使用sys.stdout
。 由于打印的 arguments 被转换为文本字符串,因此print()
不能与二进制模式文件对象一起使用。 对于这些,请改用file.write(...)
。
这就是为什么我们不能将print()
语句值分配给变量。 在这个问题中你有问(or any function)
。 所以print()
也是一个 function ,返回值为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()
内部发生了什么。
返回 object 的字符串版本。 如果未提供 object,则返回空字符串。 否则,
str()
的行为取决于是否给出了编码或错误,如下所示。
所以我们得到一个字符串object,那么你可以修改下面的代码行如下,
>>> var = str(some_function())
或者如果你真的有一个string
object,你可以使用str.join()
。
返回一个字符串,它是 iterable 中字符串的串联。 如果 iterable 中有任何非字符串值,包括
bytes
对象,则会引发TypeError
。 元素之间的分隔符是提供此方法的字符串。
变化可以如下,
>>> var = ''.join(some_function()) # you can use this if some_function() really returns a string value
您可以使用参数file
重定向print
function 的 output
from io import StringIO
s = StringIO()
print(42, file=s)
result = s.getvalue()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.