【问题标题】:Doing an assignment within python next()在 python next() 中进行赋值
【发布时间】:2016-01-13 21:54:33
【问题描述】:

是否可以在next() 函数中进行赋值。例如,考虑以下行。它在text 中搜索patterns 的给定列表,如果找到匹配项,则返回True

foundPattern = next((True for pattern in patterns  if pattern in text), False)

是否可以指定匹配的pattern 以在next() 函数之外使用。

【问题讨论】:

  • 你可能不想使用生成器理解。

标签: python next


【解决方案1】:

返回一个元组

retval, foundPattern = next(((True, pattern) for pattern in patterns  if pattern in text), (False, None))

【讨论】:

  • 我想象他需要他开始时的真/假检查。尽管“text”应该代表“text”,但在一般情况下,“text”可以是另一种支持“in”的对象,“pattern”可以是“None”。返回元组可以避免这种情况。
  • @mementum:是否找到匹配的信息已经由foundPattern是否为None来表示。
  • 这不是我之前评论中解释的一般情况。如果“text”恰好是一个字典,并且其中一个“patterns”恰好是“None”并且“None”是“text”中的一个键,那么就会有一个匹配项。
  • 是的,粗略的,在某些情况下我的策略会失败......我只是假设我们可以从表面上接受 OP,并假设你失败的边缘情况不是 OP 的有效案例。 .(我不确定是否是这种情况,但除非有相反的证据,否则我坚持这个假设)
  • @mementum:即使None 可能在成功返回时仍然可以修复。诀窍是创建一个有保证的唯一标记值:sentinel = object()foundPattern = next((pattern for pattern in patterns if pattern in text), sentinel),然后foundPattern 是匹配模式或sentinel,测试if foundPattern is not sentinel:(或is sentinel,视情况而定)是否有效地检查你成功了。如果需要,可以将哨兵初始化为关键字(仅在 Py3 上为安全起见)参数,这样可以避免在每次调用函数时创建一个新参数。
猜你喜欢
  • 2011-10-05
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 2010-10-07
  • 2016-11-16
  • 2021-03-11
  • 2011-01-21
相关资源
最近更新 更多