我无法理解为什么在运行这两个不同的代码实例时为什么会得到两个不同的输出。据我所知,没有区别。我目前正在学习对齐文本的方法,因此我想写一些东西来平衡文本的中心。从那时起,我就了解了existing_or_new
,但是我仍然对下面这两个单元之间的差异感到好奇。
每个的输入为str.center()
。
input(Juice)
->果汁
def orangeJuice():
x = input()
n = len(x)
x.rjust(2*n, '$').ljust(3*n, '$')
orangeJuice()
-> $$$$$果汁$$$$$
Screenshot of my Jupyter Notebook
此外,我很高兴接受改善我的问题的技巧,谢谢。
克里斯
答案 0 :(得分:1)
两者之间的区别在于x.rjust(2*n, '$').ljust(3*n, '$')
行的处理方式。
该行是一个表达式语句。也就是说,它具有一个返回值,就像其他任何表达式一样。大多数情况下,运行表达式语句时,返回值将被丢弃。无论如何,它的副作用仍然可能值得做,但是通常不使用表达式语句作为其返回值。
在交互式解释器会话的顶层运行时,表达式语句的处理方式有所不同。而不是忽略返回值,它由REPL的“ P”部分(读-评估-打印循环)进行处理。对于许多语言的交互式解释器来说,这样的循环是很常见的(据我所知,具体名称来自LISP)。在Python中,循环通过依次运行每个语句来工作。它检查任何表达式语句的返回值,如果不是None
,则结果的repr
将被打印出来(其他语句类型从不具有返回值,因此它们从不打印任何内容)。>
这就是x.rjust(2*n, '$').ljust(3*n, '$')
在交互式会话的顶级运行时给出输出的原因。如果您将其作为脚本的一部分运行,则其行为将类似于函数中的版本,并且该值将被静默丢弃。
处理这种情况的更好方法可能是显式print
您想要的任何输出。这不仅可以在交互式会话中使用,而且可以在任何上下文中使用。如果您执行print(x.rjust(2*n, '$').ljust(3*n, '$'))
,它将正常工作。请注意,print
在其参数上调用str
,而不是在repr
上调用,因此输出将不会完全相同(您将不会使用引号或转义序列代替特殊字符例如输出中的字符)。