5 ms·
I didn’t quite understand what the “real” anonymous functions are compared to lambda. Is it just that the lambdas aren’t multilines? Having grown up with Pytho
by wodenokoto 3y ago
I didn’t quite understand what the “real” anonymous functions are compared to lambda. Is it just that the lambdas aren’t multilines?
Having grown up with Python lambdas, maybe I’m blind to their limitations, but I didn’t feel like there was any real argument as to why not make a real function when you need more than a lambda.
- ElevenLathe 3y agoThe major killer feature of scheme-style lambdas is that you don't have to name them. Naming stuff is hard, and you usually get it wrong. If the thing you want to do is a couple lines of code, and you can just drop it in as a lambda and not have to think of a meaningful name, it's easier to keep flow-state. If things expand to the point where glancing at the code doesn't tell you what the function does, that is the time to break it out into a named function.
- jononor 3y agoJust call it foo. Not a problem.
- knightoffaith 3y agoYou can still do anything you want with just Python lambdas technically speaking right? Like, Python lambdas can express any lambda calculus expression, so as long as you're not writing something with side effects, you can use an arbitrarily complex Python lambda. Though I guess the resulting code wouldn't exactly be Pythonic.
- constantcrying 3y agoLanguage design is really about what you could do, but about how to efficiently express certain things.
- JadeNB 3y ago> Language design is really about what you could do, but about how to efficiently express certain things. That's missing a "not", right (probably after "really")?
- ElevenLathe 3y agoNot the person you're replying to, but I assume they meant "rarely" instead of "really". I make this typo all the time myself!
- JadeNB 3y agoThat makes sense. Thanks!
- powersnail 3y agoDepends on what you mean by "technically". Computationally, python lambda is fully capable of whatever a regular python function can do, including side-effects, (you can call foo.set_bar()). The limit is syntactical: a lambda has to be one single expression. So, no assignment statement, no multiple lines, etc.
- mpeg 3y agoI tend to use inner functions (nested def) when I need something more than a simple lambda, but don't want to come up with a good name or pollute the class / module namespace It works okay, but I do wish there was a better way
- uberman 3y agoCan you set a breakpoint inside a lambda function without resorting to using multi line trickery using braces that essentially does what people say lambdas should not do?
- maxcoder4 3y agoNot the OP, but I program professionally in Python for the past 5 years and i have never set a breakpoint. Assuming they don't work in lambdas (sounds like a tooling issue), is this really such a big problem?
- quibono 3y agoDepending on what you're doing this can be really annoying.
- constantcrying 3y ago>Not the OP, but I program professionally in Python for the past 5 years and i have never set a breakpoint. This means you are either one of the best or one of the worst programmers. People in the middle have bugs in their program and can use a debugger to find them. >sounds like a tooling issue The tool, in this case, being the interpreter. Which is exactly the point.
- wodenokoto 3y agoNo, but I also can’t set one in the middle of a chain of methods. In Python it’s quite common to have to refactor in order to debug.