Alex Bryan wrote:
Okay, so i don't really understand the Yield thing and i know it is useful. I've read a few things about it but it is all programming jargon and so basically it is hard for me to understand. So can anyone give me a description or link me to a site that has a good definition and/or examples of it? If you could I would really appreciate it.

Use yield when you want the function to act as a generator. That is each time it is called it generates a response and returns it, but leaves its state intact so that the next time you call it, it can pick up where it left off and continue on.

Best example I ever saw is the code that implements os.walk() function:

def walk(top, topdown=True, onerror=None):
    """
    Example:

    from os.path import join, getsize
    for root, dirs, files in walk('python/Lib/email'):
        print root, "consumes",
        print sum([getsize(join(root, name)) for name in files]),
        print "bytes in", len(files), "non-directory files"
        if 'CVS' in dirs:
            dirs.remove('CVS')  # don't visit CVS directories
    """

    from os.path import join, isdir, islink

    try:
        names = listdir(top)
    except error, err:
        if onerror is not None:
            onerror(err)
        return

    dirs, nondirs = [], []
    for name in names:
        if isdir(join(top, name)):
            dirs.append(name)
        else:
            nondirs.append(name)

    if topdown:
        yield top, dirs, nondirs
    for name in dirs:
        path = join(top, name)
        if not islink(path):
            for x in walk(path, topdown, onerror):
                yield x
    if not topdown:
        yield top, dirs, nondirs


Actually this code uses yield and is recursive.  Pretty neat.

-Larry
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to