Python中函数的返回语句中,打印"\n"时会输出"\n"而不是换行符。

3
考虑下面的Python代码。我对Python非常陌生,请帮助我。 这个函数返回 '\n56' 但我需要 --新行-- 56
def fun_ret(num):
    return '\n'+str(num)
if __name__=='__main__':
    a=fun_ret(56)

我看过类似的帖子,但都只是关于打印语句的

实际情况是通过类中方法str的doctest测试

def __str__(self):
    """(Maze)-->str
    The parameter represents a maze. Return a string representation of the maze 
    >>> maze=Maze([['#', '#', '#', '#', '#', '#', '#'],['#', 'J', '.', '.', 'P', '.', '#'], ['#', '.', '#', '#', '#', '.', '#'],['#', '.', '.', '@', '#', '.', '#'],['#', '@', '#', '.', '@', '.', '#'], ['#', '#', '#', '#', '#', '#', '#']], Rat('J', 1, 1),Rat('P', 1, 4))
    >>> str(maze)
    "#######
    #J..P.#
    #.###.#
    #..@#.#
    #@#.@.#
    #######
    J at (1, 1) ate 0 sprouts.
    P at (1, 4) ate 0 sprouts."
    """
    result=''
    for outer_list in self.maze_content:
        for inner_list in outer_list:
            result +='{0}'.format(str(inner_list))
        result+='\n'
    result += '\n'+'{0} at ({1}, {2}) ate {3} sprouts.'.format(self.rat_1.symbol,self.rat_1.row,self.rat_1.col,self.rat_1.num_sprouts_eaten)
    result += '\n'+('{0} at ({1}, {2}) ate {3} sprouts.'.format(self.rat_2.symbol,self.rat_2.row,self.rat_2.col,self.rat_2.num_sprouts_eaten))
    return result


if __name__=='__main__':
    import doctest
    doctest.testmod()

1
你不能这样做,你正在指定一个字符串字面量。你的代码中没有任何尝试显示结果的部分。 - roganjosh
你的函数中特别返回了\n - mad_
1
这段代码没有打印出任何东西。它确实返回了一个字符串,但是字符串的内容和它的表示之间是有区别的。 - Willem Van Onsem
1
你已经做过了。如果不打印,换行是什么? - roganjosh
1
只返回数字。 如果你想打印它,在你的代码中使用print(var)。每个print语句都会换行。如果你想在打印中有多行内容,那么在其中使用"\n",例如print(a, "\n", b) - Shin
显示剩余2条评论
2个回答

5

你是否在使用基于行的命令行界面?如果是这样,我可以理解你的困惑。典型的命令行界面有一个特殊的例程可以简单地显示变量值,而不会转换输出格式字符。例如,默认的Python交互式界面给我们的输出如下:

>>> def fun_ret(num):
...     return '\n'+str(num)
... 
>>> a=fun_ret(56)
>>> a
'\n56'
>>> print(a)

56
>>> 

请注意区别:简单的a命令仔细地显示变量的字符串值,扩展各种控制字符的视觉缩写。而print命令应用标准格式,其中\n字符被转换为实际的“新行”操作。
这有助于澄清问题吗?

它们不能吗?if __name__=='__main__': 我无法测试;在 REPL 中能行吗?它们已经跳出了函数体,所以只会执行吗? - roganjosh
在笔记本环境中可能发生相同的情况(我在VS Code中遇到过)。 - Mihail Bondarenco

1

我知道这是一个很老的问题,但当我尝试解决一个类似的问题时(我正在参加一门课程,在其中我必须从一个字符串字典中打印包含多行的字符串),我发现了它。因此,由于一些评论带领我找到了答案,我想在这里分享一下,以防其他人以后遇到同样的问题。

与OP的情况不同,不仅要返回字符串:

    def fun_ret(num):
        return '\n'+str(num)

you can print the statement, like so:

    def fun_ret(num):
        print('\n'+str(num))

如果您可能需要将该函数返回到某个变量中,那么这种方法不一定有效,此时最好使用第一种定义方式,并在print语句中调用它。
    print(fun_ret(num)) 

相反。

我不确定这是否有助于 OP 指定的实际情况(我自己对 Python 还很新),但如果某人需要这样做,它将导致函数调用打印一个新行,而不仅仅是返回值。


这是不正确的,fun_ret函数并没有返回一个打印语句,而是在打印换行符和数字后返回了None。你可以通过比较fun_ret(10)print(fun_ret(10))之间的差异来看到这一点,后者在打印10后还会打印出None - asm
有趣,这很有道理。我现在在想为什么我当初没有让函数直接打印出这一行而不是返回它,但由于我已经一年多没碰过那段代码了,所以现在无法回答这个问题。 :) - coppereyecat
终于找时间根据@asm的评论修改了代码,现在应该更准确了。 - coppereyecat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接