On 17/05/17 03:49, boB Stepp wrote: > corresponding to one of his functions or methods, if he could use that > word to run a function of the same name. I said I had done something > once where I used the word as a dictionary key, which was then used to > call the function.
That's the usual approach. > def check_fcn_input(function): > valid_fcns = ['spam', 'ham', 'eggs'] > if function in valid_fcns: > return True > else: > return False I would rewrite this to return the function or None def get_input_function(name): return functions.get(name) You can then use the result as a boolean in a test or simply call it directly using Pythons "ask forgiveness" approach: name,phrase = get_input() try: get_input_function(name)(phrase) except TypeError: pass > This works, but I cannot but help wondering if there is a more direct > approach? Not really. Remember that Python itself uses a dictionary to translate names to function calls. If its good enough for the interpreter its probably good enough for you! :-) > Hmm. It bothers me that in check_fcn_input() I have a list valid_fcns > and in run_fcn() I have a dictionary fcn_dict. A global dict wins here. You could of course make it a class but I'm not sure that actually makes anything clearer in this case. HTH -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor