On Friday, January 16, 2015 at 1:34:51 PM UTC-5, Peter Otten wrote:
>> Tim wrote:
>>
> Globals are generally bad as they make code non-reentrant; when two calls of
> the function run simultaneously the data will be messed up.
>
> I recommend that you use a generator:
>
> >>> def walk(obj):
> ... if not hasattr(obj, "keys"):
> ... return
> ... if "things" in obj:
> ... yield obj["things"]
> ... for v in obj.values():
> ... yield from walk(v)
> ...
> >>> d = {'things':1, 'two':{'things':2}}
> >>> set(walk(d))
> {1, 2}
>
> In Python before 3.3 you have to replace
>
> yield from walk(v)
>
> with a loop:
>
> for t in walk(v):
> yield t
Ah, a generator, I wouldn't have seen the problem in this way, but with your
example, it looks so natural.
thanks,
--Tim
--
https://mail.python.org/mailman/listinfo/python-list