Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

687
Views
Does Python have the Elvis operator?

The ternary operator in many languages works like so:

x = f() ? f() : g()

Where if f() is truthy then x is assigned the value of f(), otherwise it is assigned the value of g(). However, some languages have a more succinct elvis operator that is functionally equivalent:

x = f() ?: g()

In python, the ternary operator is expressed like so:

x = f() if f() else g()

But does python have the more succinct elvis operator?

Maybe something like:

x = f() else g() # Not actually valid python
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Yes

Python does have the elvis operator. It is the conditional or operator:

x = f() or g()

f() is evaluated. If truthy, then x is assigned the value of f(), else x is assigned the value of g().

Reference: https://en.wikipedia.org/wiki/Elvis_operator#Analogous_use_of_the_short-circuiting_OR_operator

over 4 years ago · Santiago Trujillo Report

0

NB Python does not have the null-coalescing operator defined by:

a if a is not None else b

The or operator in a or b checks the truthiness of a which is False when a==0 or len(a)==0 or other similar situations. See What is Truthy and Falsy

There is a proposal to add such operators PEP 505

over 4 years ago · Santiago Trujillo Report

0

Robᵩ's answer about using or is a good suggestion. However, as a comment to the original question,

x = f() ? f() : g()

is functionally equivalent with

x = f() ?: g()

only if f() has no side effects.

If, for instance, f() reads from a stream or generator, calling it twice will have different results than calling it once. Rewriting slightly to Python syntax, the following sample

values = (x for x in (1, 2, 3))
def f(): return next(values)
def g(): return 42
x = f() if f() else g()
print(x)

will print 2, while x = f() or g() would print 1.

It might be better to state the question as

tmp = f()
x = tmp ? tmp : g()

or, in Python,

tmp = f()
x = tmp if tmp else g()

or in Python 3.8 and up,

x = tmp if (tmp := f()) else g()

Both of the latter two examples are equivalent with

x = f() or g()

regardless of any side effects f() might have.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!