Daniel Schüle wrote: > Removing lamdba would be reduce readability of Python, I think here > for examble of code like > > class App: > .... > .... > def drawLines(self, event): > from random import randint > r = lambda : randint(1, 100) > self.canvas.create_line(r(), r(), r(), r()) > > defining one extra function would only confuse and
But you just did define one extra function!! If you're really afraid of two lines, write it as: def r(): randint(1, 100) This is definitely a bad case for an anonymous function because it's not anonymous! You give it a name, r. > and what about creating one liner factories like > from math import log10 > log = lambda basis: lambda x: log10(x) / log10(basis) > log2 = log(2) > log2(2**10) -> 10.0 This is slightly better, because at least one of your functions really is anonymous. I'm not really sure I'm convinced that it's any better than this though: def log(base): def log_in_base(x): return log10(x)/log10(base) return log_in_base because when I first read the code, I didn't catch the second, nested lambda. Of course, with a syntax-highlighting editor, I probably would have. Again though, to fix your abuse of anonymous function syntax for non-anonymous functions, you should write this as: def log(basis): return lambda x: log10(x) / log10(basis) Or if you're afraid of multiple lines: def log(basis): return lambda x: log10(x) / log10(basis) STeVe -- http://mail.python.org/mailman/listinfo/python-list