Steven D'Aprano wrote: > This is something I've never understood. Why is it bad > form to assign an "anonymous function" (an object) to a > name?
Because it obfuscates your code for no benefit. You should avoid making it hard for others to read your code (and 'others' includes yourself in the future). Also, it obfuscates tracebacks: all lambda expressions will identify in tracebacks as <lambda>, but if you define a function you can give it a meaningful name. > > Why is it considered abuse of lambda to assign the > functions to a name? Is it an abuse of lambda to do this? > > D = {"one": lambda noun: noun, > "two": lambda noun: noun + 's', > "many": lambda noun: 'lots of ' + noun + 's' } > > assert D["two"]("python") == "pythons" > > No, that is approaching a reasonable use of lambda, however I would still be inclined to write it with functions. e.g. def one(noun): return noun def two(noun): return noun+'s' def many(noun): return 'lots of %ss' % (noun,) D = dict(one=one, two=two, many=many) although in this particular case I would probably just put format strings in the dictionary: def D(style, noun): formats = dict(one="%s", two="%ss", many="lots of %ss") return formats.get(style, "an indeterminate number of %ss") % (noun,) assert D("two","python") == "pythons" -- http://mail.python.org/mailman/listinfo/python-list