【问题标题】:How to convert a generator of objects to a generator of a single property of each object?如何将对象生成器转换为每个对象的单个属性的生成器?
【发布时间】:2022-11-11 02:03:09
【问题描述】:

假设一个 api 返回一个生成 Person 对象的 python 生成器

# Example person class
# p = Person()
# p.name = "Jane Doe"
# p.age = 25

people = api.get_people() # returns generator
for person in people:
    print(person.name)

我的消费代码需要一个名称迭代器。

是否可以将原始生成器转换或包装成产生对象属性而不是对象本身的新生成器?也就是说,产生名称字符串而不是人员对象?如果是这样,怎么做?

names = name_getter(api.get_people()) # somehow wrap into a new generator?
for name in names:
    print(name)

【问题讨论】:

  • Person 是一个类吗?什么是原始生成器?
  • @Pto:Person 只是一个随意的例子。原始生成器来自对第 3 方 api 的调用。 api 返回一个生成对象的生成器。
  • 你真的知道如何编写生成器吗?包装另一个生成器和处理属性似乎与问题无关。
  • @User我只想找出比“使用生成器语法创建生成器”还需要什么。

标签: python attributes generator wrapper


【解决方案1】:

事实证明这很容易,这会生成一个包装原始生成器的新生成器:

def get_names():
  for person in api.get_people():
    yield person.name  

也可以通过Generator expressions(又名生成器理解)来实现:

# (<expression> for <var> in <iterable> if <condition>)

names = (p.name for p in api.get_people()) 

【讨论】:

    猜你喜欢
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    相关资源
    最近更新 更多