首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何规避对字段名称的限制?

问如何规避对字段名称的限制?
EN

Stack Overflow用户
提问于 2015-09-29 08:00:35
回答 1查看 165关注 0票数 0

如果我定义一个recarray r,它有一个名为data的字段,如下所示

代码语言:javascript
复制
import numpy
r = numpy.zeros( 1, numpy.dtype([('data', 'f8')]) ).view(numpy.recarray )

数据字段将引用某个内部recarray缓冲区,而不是浮点数。确实,跑步

代码语言:javascript
复制
r.data

收益率

代码语言:javascript
复制
<read-write buffer for 0x7f3c10841cf8, size 8, offset 0 at 0x7f3c1083ee70>

而不是。我怀疑失败的原因是recarray已经有一个名为data的成员,因此它只是忽略了我名为data的字段。如果我尝试使用已存在的recarray成员的任何名称,也会出现同样的问题。

我的问题是:

1)有可能绕过recarray的这个限制吗?如何做到?

2)这一限制将来可能会取消吗?

EN

回答 1

Stack Overflow用户

发布于 2015-09-29 09:32:12

下面是recarray的getattribute方法。Python将obj.par1转换为obj.__getattribute__('par1')。这就解释了为什么在recarray中使用时,字段名必须是有效的属性名。

代码语言:javascript
复制
def __getattribute__(self, attr):
    try:
        return object.__getattribute__(self, attr)  #**
    except AttributeError: # attr must be a fieldname
        pass
    fielddict = ndarray.__getattribute__(self, 'dtype').fields
    try:
        res = fielddict[attr][:2]
    except (TypeError, KeyError):
        raise AttributeError("record array has no attribute %s" % attr)
    obj = self.getfield(*res)
    # if it has fields return a recarray, otherwise return
    # normal array
    if obj.dtype.fields:
        return obj
    if obj.dtype.char in 'SU':
        return obj.view(chararray)
    return obj.view(ndarray)

**行解释了为什么obj.data返回缓冲区指针,而不是您的字段。同样的情况也适用于“形状”和“步幅”。这也使得访问数组方法成为可能。您希望recarray的行为尽可能地像常规数组一样,不是吗?

结构化数组中的字段名称就像字典中的键,形式相对自由(尽管我从未探索过限制)。但在recarray中,这些名称还必须具有属性名称的功能。属性名必须是有效的变量名--这是一个Python约束。

在https://stackoverflow.com/a/32540939/901925中,我引用了genfromtxt文档:

具有结构化数据类型的recarray数组也可以看作

数组,其中字段可以被访问,就像它是属性一样。出于这个原因,我们可能需要确保字段名不包含任何空格或无效字符,或者它不对应于标准属性的名称(如大小或形状),这会使解释器感到困惑。

还有一篇关于Python类的教程说:

Python属性引用使用用于

中所有属性引用的标准语法: obj.name。有效的属性名称是创建类对象时在类的命名空间中的所有名称。https://docs.python.org/2/tutorial/classes.html#tut-object

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32833609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档