3 ms·
If you're used to this, it's nice and readable. Or you can do, return filter(None,tokens) Not obvious, but giving None is like giving "lambda x : x" to f
by ks2048 2y ago
If you're used to this, it's nice and readable.
Or you can do,
return filter(None,tokens)
Not obvious, but giving None is like giving "lambda x : x" to filter().
- chaos_emergent 2y agoHoly shit, I’ve been writing python for 15 years and it’s the first time I’ve seen None used as an identity function. That’s nuts! How does it work under the hood? Does filter have a special case for evaluating None?
- echoangle 2y agoYes, that’s just a special case. You can’t call None as a function. https://docs.python.org/3/library/functions.html#filter https://docs.python.org/3/library/functions.html#filter > If function is None, the identity function is assumed, that is, all elements of iterable that are false are removed.
- sroussey 2y agoYou can do the same thing in JavaScript with Boolean Eg, arr.filter(Boolean)
- evnp 2y agoIs this any different from `filter(bool, tokens)`? (similar to the JS equivalent mentioned in a sibling) If not, I'm now curious why the `None` special case was added to `filter`..
- hacked_greenhat 2y agohttps://stackoverflow.com/questions/8748036/is-there-a-builtin-identity-function-in-python https://stackoverflow.com/questions/8748036/is-there-a-built... While this doesn't explain why filter accepts None as the lambda, I think the fact that there are no builtin identity function kind of explains why. It's easier to write None rather than put an identity lambda. I reckon it also makes it easier for a compiler to optimize this specific case.
- evnp 2y agoThanks for the explanation. I take your point, but in the `filter` case `bool` seems just as easy as `None`, but with the added benefit that no awareness of a special case is needed -- any python programmer should understand how the `bool` builtin works. Curious if there's any downside.