, . , . .
try-except
. , a TypeError
, . , .
. . - . yield from
, python3.3 +.
, except
yield element
, toflatten
. .
def flatten(toflatten):
for element in toflatten:
try:
yield from flatten(element)
except TypeError:
yield element
,
>>> list(flatten([1,2,3,[4,5,6]]))
[1, 2, 3, 4, 5, 6]
EAFP ( , ), . ( , ), : .
: LYBL (Look Before You Leap). , , if
, .
def flatten(toflatten):
for element in toflatten:
if isinstance(element, list):
yield from flatten(element)
else:
yield element
, ,
>>> list(flatten([1,2,3,[4,5,6]]))
[1, 2, 3, 4, 5, 6]
, yield from
. , ?
>>> list(flatten([1,2,3,[4,5,'abc']]))
[1, 2, 3, 4, 5, 'abc']
, , . , flatten
.
x = [1, 2, 3]
x.append(x)
flatten(x)
:
RuntimeError: maximum recursion depth exceeded