Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
291 views
in Technique[技术] by (71.8m points)

python - Recursive generator and `yield from`

I have a data structure which is essentially a mixture of nested lists/dictionaries:

class System:
    def __init__(self, name, subsystems, uri):
        self.name = name
        self.subsystems = subsystems
        self.uri = uri

A = System("A", [], "http://A")
B1 = System("B1", [], "http://B/B1")
B21 = System("B12", [], "http://B/B2/B21")
B22 = System("B22", [], "http://B/B2/B22")
B2 = System("B2", [B21, B22], "http://B/B2")
B = System("B", [B1, B2], "http://B")
C1 = System("C1", [], "http://C/C1")
C = System("C", [C1], "http://C")
S = System("S", [A, B, C], None)

In Python I wrote the following recursive generator:

def find_subsystem(system, name):
    if system.name == name:
        yield system.uri
    for sub in system.subsystems:
        yield from find_subsystem(sub, name)

allowing me to do "queries" like

next(find_subsystem(S, "B22"))
#=> 'http://B/B2/B21'

or

list(find_subsystem(S, "B22"))
#=> ['http://B/B2/B21', 'http://B/B2/B22']

Is this the "best" (performance and/or code cleanliness) to do that?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...