【问题标题】:In Python REPL, what is the difference between using a variable and printing it? [closed]在 Python REPL 中,使用变量和打印变量有什么区别? [关闭]
【发布时间】:2021-12-04 00:15:47
【问题描述】:

考虑以下我在 IDLE 中运行的 Python 3.7.2 代码 [*](我添加了行号以供参考):

[1] >>>> a_tuple = (1,2,3)
[2] >>>> a_tuple
[3] (1,2,3)
[4] >>>> print(a_tuple)
[5] (1,2,3)
[6] >>>> an_ndarray = numpy.array([1,2,3])
[7] >>>> an_ndarray
[8] array([1, 2, 3])
[9] >>>> print(an_ndarray)
[10] [1, 2, 3]

我正在学习计算机科学术语和 Python,我有以下问题/要求:

  1. 我在 [2] 中做了什么,调用对象?还是调用是为函数保留的?
  2. [8] 中返回了什么?这不是ndarray 的内容。这没有意义,但好像返回的是创建它的函数调用,只是它缺少numpy. 部分。
  3. [6] 中的 [1,2,3] 是否被视为列表或只是 numpy.array() 参数的语法?
  4. 有没有办法在不使用 [8] 中的 array() 部分且不使用 print() 的情况下获取 ndarray 的内容?
  5. 使用精确的技术术语,您能否详细说明 [3] 和 [8] 为何如此不同?
  6. 一般来说,控制台中的一种类型是什么(例如 [2])? 命令调用输入
  7. 什么叫 [3]、[5]、[8] 和 [10]? 输出?有哪些同义词?
  8. [*](见第一句)叫什么?它不是精确的代码。

【问题讨论】:

  • 打印一个对象调用__str__特殊方法,调用它(这不是一个很好的描述。调用需要像object()这样的括号)调用__repr__特殊方法。
  • 这些听起来很像家庭作业问题
  • (1) 不,调用总是需要附加括号,其中通常带有参数。 (2) 是repr(an_ndarray)。 Python shell 总是要求评估表达式的表示。类可以定义它们的对象应该如何表示。
  • @AdrienLevert 好吧,他们不是。
  • 欢迎来到 Stack Overflow。这个问题似乎“需要更多关注”,请参考"Why are some questions closed??" 的指导方针

标签: python terminology


【解决方案1】:

首先,REPL 中的一个单独变量将打印其对象表示,方法是在该对象上调用repr() 函数,不是“调用变量”;看起来像a_tuple()

赋值显然没有输出

这解释了 1-3 和 6-8

打印语句将在对象上运行str() 函数并显示该输出。

两者都映射到在所有对象类型上定义的“魔术函数”

What is the difference between __str__ and __repr__?

经验法则:__repr__ 适用于开发人员,__str__ 适用于客户

【讨论】:

    【解决方案2】:

    IDLE 是 Read-Eval-Print 循环(又名 REPL)的一个示例。你输入一个语句,它会执行它,如果它是一个带有值的表达式,它就会打印出这个值。

    1. 调用一个函数,您使用分配一个变量。 因此,在 [2] 中,您使用了变量 a_tuple。 IDLE 评估它并打印它的值。
    2. 在 [8] 中,它正在打印 ndarray 的表示形式,这是一个 numpy 数组。 numpy 数组的表示形式显示为 array() 内方括号中的内容。
    3. [1, 2, 3] 是一个列表,作为参数传递给 numpy.array() 函数。然后 numpy 将创建一个数组,其内容是列表的元素。
    4. 您可以使用ndarray.tolist() 将数组转换为列表。
    5. [3] 和 [8] 之间的唯一区别是您正在评估和打印的值的类型。 [3] 是一个列表,[8] 是一个数组。不同的类型以不同的方式显示。
    6. 它们是 Python 语句。
    7. 是的,它们是输出。更具体地说,它们是您在前几行中键入的表达式的值。
    8. 是的,它是代码。 REPL 的目的是允许您以交互方式执行代码,而不是在脚本文件中运行代码。

    【讨论】:

    • 谢谢!那么,对于4.,有没有办法简单地获取内容而不直接索引它们或调用其他函数?我猜 5. 的答案是 [2] 和 [8] 是对象的表示;我不知道这个概念。
    • 您的意思是比较[3][8]
    • 真;刚刚编辑过。
    • 打印的所有内容都是调用某个将值格式化为字符串的函数的结果。当 IDLE 打印一个对象时,它会打印它的“表示”,这往往更详细或更技术性(例如,字符串用引号和转义序列显示)。 print() 函数打印它的“字符串”,它更人性化(字符串显示不带引号,转义序列被解释)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 2023-03-21
    • 1970-01-01
    • 2011-01-14
    相关资源
    最近更新 更多