I\'ve to calculate the time-complexity of an algorithm, but in it I\'m calling os.walk which I can\'t consider as a single operation but many.
The sources of os.wal
This is too long for a comment: in CPython, a yield
passes its result to the immediate caller, not directly to the ultimate consumer of the result. So, if you have recursion going R
levels deep, a chain of yield
s at each level delivering a result back up the call stack to the ultimate consumer takes O(R)
time. It also takes O(R)
time to resume the R
levels of recursive call to get back to the lowest level where the first yield
occurred.
So each result yield
'ed by walk()
takes time proportional to the level in the directory tree at which the result is first yield
'ed.
That's the theoretical ;-) truth. In practice, however, this makes approximately no difference unless the recursion is very deep. That's because the chain of yield
s, and the chain of generator resumptions, occurs "at C speed". In other words, it does take O(R)
time, but the constant factor is so small most programs never notice this.
This is especially true of recursive generators like walk()
, which almost never recurse deeply. Who has a directory tree nested 100 levels? Nope, me neither ;-)