Python 对象的属性是否有一个名称以使其具有与其代码等效的控制台表示?

Tom*_*Tom 5 python console representation pandas

这是一个比较宽泛的话题,但我将尝试将其缩减为一些具体问题。

我在想Python 中的某个~meta~属性,其中许多基本数据类型的控制台表示等效于用于构造这些对象的代码:

l = [1,2,3]
d = {'a':1,'b':2,'c':3}
s = {1,2,3}
t = (1,2,3)
g = "123"

###

>>> l
[1, 2, 3]
>>> d
{'a': 1, 'b': 2, 'c': 3}
>>> s
{1, 2, 3}
>>> t
(1, 2, 3)
>>> g
'123'
Run Code Online (Sandbox Code Playgroud)

因此,对于这些对象中的任何一个,我都可以将控制台输出复制到代码中以创建这些结构或将它们分配给变量。

这不适用于某些对象,例如函数:

def foo():
    pass

f = foo
L = [1,2,3, foo]

###

>>> f
<function foo at 0x00000235950347B8>
>>> L
[1, 2, 3, <function foo at 0x00000235950347B8>]
Run Code Online (Sandbox Code Playgroud)

虽然l上面的列表有这个属性,但L这里的列表没有;但这似乎只有 b/cL 包含一个不包含此属性的元素。所以在我看来,一般来说,list以某种方式拥有这个属性。

这也适用于非标准库中的一些对象:

import numpy as np
a = np.array([1,2,3])

import pandas as pd
dr = pd.date_range('01-01-2020','01-02-2020', freq='3H')

###

>>> a
array([1, 2, 3])
>>> dr
DatetimeIndex(['2020-01-01 00:00:00', '2020-01-01 03:00:00',
               '2020-01-01 06:00:00', '2020-01-01 09:00:00',
               '2020-01-01 12:00:00', '2020-01-01 15:00:00',
               '2020-01-01 18:00:00', '2020-01-01 21:00:00',
               '2020-01-02 00:00:00'],
              dtype='datetime64[ns]', freq='3H')
Run Code Online (Sandbox Code Playgroud)

对于numpy数组,控制台输出与使用的代码匹配,前提是您array在命名空间中。对于pandas.date_range,它有点不同,因为控制台输出可以构造由 生成的相同对象dr = pd.date_range('01-01-2020','01-02-2020', freq='3H'),但使用不同的代码。

有趣的例子

ADataFrame不包含此属性,但是使用该to_dict()方法将其转换为一个包含此属性的结构

import pandas as pd
df = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6]})

###

>>> df
   A  B
0  1  4
1  2  5
2  3  6
>>> df.to_dict()
{'A': {0: 1, 1: 2, 2: 3}, 'B': {0: 4, 1: 5, 2: 6}}
>>> pd.DataFrame.from_dict({'A': {0: 1, 1: 2, 2: 3}, 'B': {0: 4, 1: 5, 2: 6}})
   A  B
0  1  4
1  2  5
2  3  6
Run Code Online (Sandbox Code Playgroud)

这很有用的一个示例场景是.....在 SO 上发布!B/c 您可以将 DataFrame 转换为数据结构,其中文本表示可用于构建该数据结构。因此,如果您to_dict()与某人共享DataFrame的版本,他们将获得可用于重新创建结构的 Python 语法代码。我发现这pd.read_clipboard()在某些情况下是有利的。


我的问题基于上述:

主要是:

  • 这个“属性”有名字吗(假设它是 Python 中对象的一个​​真正有意的“属性”?)

此外(这些不太具体,我承认,如果偏离主题可以删除):

  • 它是 Python 独有的东西还是在其他语言中也适用?
  • 这个属性是否存在其他基本的 Python 结构?

如果这是人们的常识,或者如果我在这里制造一座山,我深表歉意!

Boa*_*les 1

对象的控制台表示是什么,取决于其__repr__()方法的编写方式。所以我想如果你把这个“属性”当作对象的属性来谈论,我们大多数人至少会理解repr。该方法必须返回一个字符串,但字符串的内容由作者决定,因此不可能一般地说对象的 与repr创建它所需的代码是否相同。在某些情况下(例如函数),代码可能太长而无用。在其他结构中(例如递归结构),可能没有合理的线性表示。

重新发布为答案而不是评论,以回应评论线程中参与者的建议。