On 2024-03-17 17:15:32 +1300, dn via Python-list wrote: > On 17/03/24 12:06, Peter J. Holzer via Python-list wrote: > > On 2024-03-16 08:15:19 +0000, Barry via Python-list wrote: > > > > On 15 Mar 2024, at 19:51, Thomas Passin via Python-list > > > > <python-list@python.org> wrote: > > > > I've always like writing using the "or" form and have never gotten bit > > > > > > I, on the other hand, had to fix a production problem that using “or” > > > introducted. > > > I avoid this idiom because it fails on falsy values. > > > > Perl has a // operator (pronounced "err"), which works like || (or), > > except that it tests whether the left side is defined (not None in > > Python terms) instead of truthy. This still isn't bulletproof but I've > > found it very handy. > > > So, if starting from: > > def method( self, name=None, ): > > rather than: > > self.name = name if name else default_value > > ie > > self.name = name if name is True else default_value
These two lines don't have the same meaning (for the reason you outlined below). The second line is also not very useful. > the more precise: > > self.name = name if name is not None or default_value > > or: > > self.name = default_value if name is None or name Those are syntax errors. I think you meant to write "else" instead of "or". Yes, exactly. That's the semantic of Perl's // operator. JavaScript has a ?? operator with similar semantics (slightly complicated by the fact that JavaScript has two "nullish" values). hp -- _ | Peter J. Holzer | Story must make more sense than reality. |_|_) | | | | | h...@hjp.at | -- Charles Stross, "Creative writing __/ | http://www.hjp.at/ | challenge!"
signature.asc
Description: PGP signature
-- https://mail.python.org/mailman/listinfo/python-list