gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:11:22 25 4
gpt4 key购买 nike

这是一个比较宽泛的话题,但我将尝试将其缩减为一些具体问题。
我在想 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'
因此,对于这些对象中的任何一个,我都可以将控制台输出复制到代码中以创建这些结构或将它们分配给变量。
这不适用于某些对象,例如函数:
def foo():
pass

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

###

>>> f
<function foo at 0x00000235950347B8>
>>> L
[1, 2, 3, <function foo at 0x00000235950347B8>]
而名单 l上面有这个属性,列表 L这里没有;但这似乎只是 b/c L包含一个不具有此属性的元素。所以在我看来,一般来说, 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')
对于 numpy数组,控制台输出与使用的代码匹配,前提是您有 array在命名空间中。对于 pandas.date_range ,它有点不同,因为控制台输出可以构造由 dr = pd.date_range('01-01-2020','01-02-2020', freq='3H') 创建的相同对象。 ,但代码不同。
有趣的例子
一个 DataFrame不持有此属性,但使用 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
这很有用的一个示例场景是.....在 SO 上发布! B/c 您可以将 DataFrame 转换为数据结构,其中文本表示可用于构建该数据结构。所以如果你分享了 to_dict()与某人的 DataFrame 版本,他们正在获取可用于重新创建结构的 Python 语法代码。我发现这优于 pd.read_clipboard()在某些情况下。

我的问题基于上述:
主要是:
  • 这个“属性”有名字吗(假设它是 Python 中对象的真正有意的“属性”?)

  • 此外(这些不太具体,我承认,如果偏离主题可以删除):
  • 它是 Python 独有的东西还是在其他语言中也适用?
  • 这个属性是否存在其他基本的 Python 结构?

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

    最佳答案

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

    关于python - Python 对象的属性是否有一个名称以使其具有与其代码等效的控制台表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62744947/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com