【问题标题】:Difference between functions and non-functions?功能和非功能的区别?
【发布时间】:2018-10-20 23:59:50
【问题描述】:

当我运行这两个不同的代码实例时,我无法理解为什么会得到两个不同的输出。据我所知,没有区别。我目前正在学习对齐文本,所以我想我会写一些东西来平衡中心的文本。从那以后我了解了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, '$')

--> $$$$$果汁$$$$$

Screenshot of my Jupyter Notebook

另外,我很高兴接受改进我的问题的提示,谢谢。

克里斯

【问题讨论】:

  • 前者是一个函数,它返回任何东西,也不打印任何东西。在外部,没有任何功能,因此“解释器”将结果(如果 not None)打印到控制台。

标签: python function jupyter-notebook


【解决方案1】:

两者之间的区别在于x.rjust(2*n, '$').ljust(3*n, '$') 行的处理方式。

那一行是一个表达式语句。也就是说,它有一个返回值,就像任何其他表达式一样。大多数情况下,当您运行表达式语句时,返回值会被丢弃。无论如何,它可能仍然值得做,因为它的副作用,但你通常不使用表达式语句作为它的返回值。

在交互式解释器会话的顶层运行时,表达式语句的处理方式不同。它不是被忽略的返回值,而是由 REPL 的“P”部分(Read-Eval-Print Loop)处理。这种循环对于许多语言的交互式解释器来说很常见(具体名称来自 LISP,据我了解)。在 Python 中,循环通过依次运行每个语句来工作。它检查任何表达式语句的返回值,如果不是None,则打印出结果的repr(其他语句类型从没有返回值,因此它们从不打印任何内容)。

这就是为什么当您在交互式会话的顶层运行x.rjust(2*n, '$').ljust(3*n, '$') 时会给出输出。如果您将其作为脚本的一部分运行,它的行为将类似于函数中的版本,并且该值将被静默丢弃。

处理这种情况的更好方法可能是明确地print 任何你想要的输出。这可以在任何情况下工作,而不仅仅是在交互式会话中。如果你这样做print(x.rjust(2*n, '$').ljust(3*n, '$')),它就会起作用。请注意,print 在其参数上调用 str,而不是 repr,因此输出不会完全相同(您不会在输出中使用引号或转义序列代替特殊字符,因为实例)。

【讨论】:

  • 哇,非常感谢,这更有意义。
猜你喜欢
  • 2013-05-04
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多