2

print match.group() が、以下の for ループで最初に呼び出されたときに結果の一致のみを返す理由を誰か説明できますか? 呼び出されるたびに一致を出力することを期待しています。Python Docs: Regex HOWTO のこのセクションを読んでいるときに、この例に遭遇しました。

Python 2.7.2 (default, Oct 11 2012, 20:14:37) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> p = re.compile('\d+')
>>> iterator = p.finditer('12 drummers, 11 pipers, 10 dancers')
>>> iterator
<callable-iterator object at 0x107deabd0>
>>> for match in iterator:
...  print match.group()
... 
12
11
10
>>> for match in iterator:
...  print match.group()
... 
>>> 
4

2 に答える 2

2

p.finditer()一致を生成するイテレータを返します。イテレータが 1 回実行されると、イテレータは使い果たされます。これを行うのと同じです:

>>> l = [1, 2, 3]
>>> it = iter(l)
>>> for val in it:
    print val
1
2
3
>>> for val in it:
    print val
>>>

つまりmatch.group()、2 番目の for ループで呼び出すことはありません。何も返さなかった場合は、代わりにいくつかNoneの が出力されることを期待する必要があります。

于 2013-10-10T04:10:13.707 に答える