python - 功能和非功能的区别?
问题描述
当我运行这两个不同的代码实例时,我无法理解为什么会得到两个不同的输出。据我所知,没有区别。我目前正在学习对齐文本,所以我想我会写一些东西来平衡中心的文本。从那时起,我已经了解了str.center()
,但我仍然对下面这两个单元格之间的区别感到好奇。
每个的输入是input(Juice)
。
def orangeJuice():
x = input()
n = len(x)
x.rjust(2*n, '$').ljust(3*n, '$')
orangeJuice()
--> 果汁
x = input()
n = len(x)
x.rjust(2*n, '$').ljust(3*n, '$')
--> $$$$$果汁$$$$$
另外,我很高兴接受改进我的问题的提示,谢谢。
克里斯
解决方案
两者之间的区别在于如何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
,因此输出不会完全相同(例如,您不会得到引号或转义序列来代替输出中的特殊字符)。
推荐阅读
- c++ - C++:将文本文件读入二维数组
- ios - 无法在 UICollection 视图中更改视图颜色
- python - 用于拆分表的 Python 代码或替代方法
- swift - UIDatePicker 显示不正确的时间
- c - 读取带有数字的文件并将其保存到 C 中的数组中
- laravel - 如何将值传递给模态形式laravel 5.2
- javascript - 放置 getLocation() 函数和 showPosition() 非法构造函数
- intellij-idea - IntelliJ IDEA / RubyMine 在 Find in Path 字段中插入十六进制字符
- asp.net - 为什么 Web 服务可以在 Oracle 数据库上运行,但我看不到 db 上的实际更改?
- javascript - 将文件名从上传复制到 textarea