Python:为什么使用 write() 时输出中有额外的空行



请考虑以下Python 3.x代码:

class FancyWriter:    
    def write(self, string):
        print('<'+string+'>')
        return len(string)+2
def testFancyWriter():
    fw = FancyWriter()
    print("Hello World!", file=fw)
    print("How many new lines do you see here?", file=fw)
    print("And here?", file=fw)
    return
testFancyWriter()

输出如下所示:

<Hello World!>
<
>
<How many new lines do you see here?>
<
>
<And here?>
<
>

为什么中间有这些空白行?

好的 - 创建类似 FancyWriter 类的真正意图实际上是为 Excel 创建一个编写器类:我需要将选项卡式文本行写到 Excel 单元格中,将 Excel 行中的每一行以及每个制表符分隔的子字符串写入该行的单元格中。奇怪的是,在那个 ExcelWriter 类中(它还有一个像上面一样的 write() 函数,只是对 print() 的调用被替换为设置单元格值),发生了类似的现象 - 有空白行,就像上面的 FancyWriter 类的输出一样!(如果传入字符串的最后一个字符是"",我让目标单元格在下面移动一行。

有人能解释这一点吗?字面意义上的字里行到底发生了什么?

对于带有写入函数的 FancyWriter(输出?文件?)类来说,"最 pythonic 的方式"是什么,以获得所需的输出,例如

<Hello World!>
<How many new lines do you see here?>
<And here?>

提前非常感谢!

你的"空行"实际上是用字符串'n'调用你的函数来处理行尾。 例如,如果我们将打印更改为

print(repr(string))

并将hello world行更改为

print("Hello World!", file=fw, end="zzz")

我们看到

'Hello World!'
'zzz'
'How many new lines do you see here?'
'n'
'And here?'
'n'

基本上,print不会构建一个字符串,然后将end值添加到其中,它只是end传递给编写器本身。

如果你想避免这种情况,你必须避免print,我认为,或者特例你的作者来处理接收某个(比如空)参数的情况,因为看起来print即使它是空字符串也会传递end

相关内容

  • 没有找到相关文章

最新更新