Sujet : Re: Configuring an object via a dictionary
De : hjp-python (at) *nospam* hjp.at (Peter J. Holzer)
Groupes : comp.lang.pythonDate : 17. Mar 2024, 17:11:53
Autres entêtes
Message-ID : <mailman.109.1710688315.3452.python-list@python.org>
References : 1 2 3 4 5
Pièces jointes : signature.asc (application/pgp-signature) 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.|_|_) | || | | hjp@hjp.at | -- Charles Stross, "Creative writing__/ | http://www.hjp.at/ | challenge!"