繁体   English   中英

Python:将打印 output 分配给变量

[英]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

可能您需要strreprunicode函数之一

somevar = str(tag.getArtist())

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

somevar = tag.getArtist()

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

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM