当前位置: 首页 > news >正文

Python使用rosbag使用getattr只能获取一层的数据,不能直接获取多层数据例如 a.b.c.d。使用for range写一个递归用来获取多层数据

使用`for`循环和`range`来遍历属性列表确实是一个更简单直观的方式,特别是不需要考虑性能优化和异常处理时。以下是使用`for`循环代替递归的示例代码:

 

```python

def get_nested_attr(obj, attr_str):

    attrs = attr_str.split('.')

    for attr in attrs:

        # 尝试获取下一个属性,如果属性不存在则返回None

        obj = getattr(obj, attr, None)

        if obj is None:

            return None

    return obj

 

# 示例使用

class NestedObject:

    def __init__(self):

        self.a = NestedObject()

        self.a.b = NestedObject()

        self.a.b.c = NestedObject()

        self.a.b.c.d = 'Hello, world!'

 

obj = NestedObject()

value = get_nested_attr(obj, 'a.b.c.d')

print(value) # 输出: Hello, world!

```

 

在这个例子中,我们直接遍历`attrs`列表中的每个属性名,并使用`getattr`来尝试获取每个属性。如果在某个点上属性不存在,`getattr`将返回我们指定的默认值`None`,并且我们立即返回这个`None`值。如果所有的属性都被成功获取,函数将返回最内层的属性值。

 

这种方法的好处是代码更简洁,易于理解,并且对于大多数情况来说性能也是足够的。然而,对于非常大的属性链或者性能要求极高的场合,递归方法可能会需要一些优化来避免栈溢出或提高性能。但对于大多数常规用途,使用`for`循环通常是足够好的解决方案。

http://www.lryc.cn/news/367529.html

相关文章:

  • LNWT--篇章三小测
  • 【NoSQL】Redis练习
  • Git 和 Github 的使用
  • 学习分享-断路器Hystrix与Sentinel的区别
  • 社区物资交易互助平台的设计
  • 19-Nacos-服务实例的权重设置
  • R语言数据探索和分析23-公共物品问卷分析
  • Webix前端界面框架:深度解析与应用实践
  • Qt基于SQLite数据库的增删查改demo
  • 新书推荐:2.2.4 第11练:消息循环
  • MASA:匹配一切、分割一切、跟踪一切
  • Websocket前端传参:深度解析与实战应用
  • 造假高手——faker
  • 前端工程化工具系列(十二)—— PostCSS(v8.4.38):CSS 转换工具
  • Scanpy(3)单细胞数据分析常规流程
  • 【Stable Diffusion】(基础篇二)—— Stable Diffusion图形界面介绍和基本使用流程
  • OpenCv之简单的人脸识别项目(动态处理页面)
  • 【Linux】进程间通信
  • UI与前端:揭秘两者的微妙差异
  • idea如何根据路径快速在项目中快速打卡该页面
  • 探索成功者的特质——俞敏洪的观点启示
  • MCU的环形FIFO
  • 使用proteus仿真51单片机的流水灯实现
  • 【漏洞复现】Apache OFBiz 路径遍历导致RCE漏洞(CVE-2024-36104)
  • 数据库表中创建字段查询出来却为NULL?
  • 缓存方法返回值
  • 【十大排序算法】快速排序
  • linux系统ubuntu中在命令行中打开图形界面的文件夹
  • 【C++11数据结构与算法】C++ 栈
  • pdf文件如何防篡改内容