Thanks a lot! This clarified [I think] my misunderstanding about yield, and I also learned something about efficiency from George's code -- Thanks.
So, The function tel(aString) takes a string (or a number) that denote a phone number, using digits or letters, and returns a generator for the set of all possible words that are made up of that phone number. It's not a terribly useful program, but it's short and it's a lot of fun. Mayer import string def addKeyString(keyString): for ch in keyString: keypad[ch] = keyString keypad = {} addKeyString('0') addKeyString('1') addKeyString('2ABC') addKeyString('3DEF') addKeyString('4GHI') addKeyString('5JKL') addKeyString('6MNO') addKeyString('7PQRS') addKeyString('8TUV') addKeyString('9WXYZ') def tel(phone): phoneString = str(phone) length = len(phoneString) buffer = [Null] * length def run(n): if n == length: yield string.join(buffer, '') else: for word in run(n + 1): for letter in keypad[phoneString[n]]: buffer[n] = letter yield buffer return run(0, '') -- http://mail.python.org/mailman/listinfo/python-list