将函数打印输出分配给字符串变量

Posted

技术标签:

【中文标题】将函数打印输出分配给字符串变量【英文标题】:Assigning function print output to string variable 【发布时间】:2016-04-08 09:14:49 【问题描述】:

我有以下函数,它遍历两个列表并打印出选择的蔬菜和水果。

def Selection():
    print("VEGETABLES FOR THE WEEK:\n")
    for veg in veg_selection:
        print(veg.upper())
    print("\n")
    print("FRUITS FOR THE WEEK:\n")
    for fruit in fruit_selection:
        print(fruit.upper())

所以结果可能如下所示:

VEGETABLES FOR THE WEEK:

BROCOLLI
PEAS
CARROTS
SWEET CORN
WHITE ONIONS


FRUITS FOR THE WEEK:

GRAPEFRUIT
CHERRIES
ORANGE
COCONUT
RASPBERRIES

我正在努力将函数的打印结果分配给包含格式化字符串的单个变量。我是否需要将结果保存为文本文件,然后再次读取?我可以只使用文本连接吗?我不确定如何处理函数中的 for 循环?任何帮助都非常感谢。

【问题讨论】:

【参考方案1】:

其中一种解决方案是将所有迭代字符串存储到容器中,然后将它们存储在join 中。引用文档:

string.join(words[, sep]) 将单词列表或元组与中间出现的 sep 连接起来。 sep 的默认值是一个空格字符。 string.join(string.split(s, sep), sep) 等于 s 总是正确的。

所以示例代码如下所示:

import os

def selection():
    strings = []
    strings.append("VEGETABLES FOR THE WEEK:\n")
    for veg in veg_selection:
        strings.append(veg.upper())
    strings.append("\n")
    strings.append("FRUITS FOR THE WEEK:\n")
    for fruit in fruit_selection:
        strings.append(fruit.upper())
    return os.linesep.join(strings)

s = selection()  # s now contains output string, and nothing is printed
print(s)  # print whole string at once

os.linesep 是具有正确换行符的跨操作系统常量。

用于分隔(或者更确切地说,终止)行的字符串 当前平台。这可能是单个字符,例如 '\n' 表示 POSIX 或多个字符,例如 Windows 的 '\r\n'。不要 在编写以文本形式打开的文件时,使用 os.linesep 作为行终止符 模式(默认);在所有平台上都使用单个 '\n'。

另外,半相关的问题:Good way to append to a string。

【讨论】:

【参考方案2】:

可能最简单的方法是添加一个额外的步骤,将文本附加到您需要的变量中。见下文:

def Selection():
    output_text = "VEGETABLES FOR THE WEEK:\n"
    print("VEGETABLES FOR THE WEEK:\n")
    for veg in veg_selection:
        output_text += veg
        print(veg.upper())
    output_text += "\n"
    print("\n")
    output_text += "FRUITS FOR THE WEEK"
    print("FRUITS FOR THE WEEK:\n")
    for fruit in fruit_selection:
        output_text += fruit
        print(fruit.upper())

您可以更改代码以在末尾输出 output_text 字符串,而不是打印每一行。

【讨论】:

【参考方案3】:

您可以像这样连接到单个字符串变量:

def Selection():
    output = "VEGETABLES FOR THE WEEK:\n"
    for veg in veg_selection:
        output += veg.upper() + "\n"
    output += "\nFRUITS FOR THE WEEK:\n"
    for fruit in fruit_selection:
        output += fruit.upper() + "\n"

然后您可以通过添加到末尾来直接打印字符串:

print(output)

或通过在末尾添加返回字符串以供其他地方使用:

return output

【讨论】:

【参考方案4】:

把你的函数变成生成器:

def Selection():
    yield "VEGETABLES FOR THE WEEK:\n"
    for veg in veg_selection:
        yield veg.upper()
    yield "\n"
    yield "FRUITS FOR THE WEEK:\n"
    for fruit in fruit_selection:
        yield fruit.upper()

那么,转成字符串就很简单了:

'\n'.join(Selection())

打印结果:

for line in Selection():
    print(line)

【讨论】:

以上是关于将函数打印输出分配给字符串变量的主要内容,如果未能解决你的问题,请参考以下文章

如何将字符串列分配给变量并在 Bash 脚本的输出中引用它

将字符串变量分配给unsigned char变量

我正在使用来自 python 的 powershell 命令获取一些数据,而 Windows 中没有 cmd!如何将此输出分配给字符串变量?

有没有办法将格式化的 BigDecimal 数字分配给 BigDecimal?

将这个复活节彩蛋分配给一个变量

将函数的输出分配给R中的两个变量