[Python-Dev] Adding a conditional expression in Py3.0

Guido van Rossum guido at python.org
Thu Sep 29 16:32:13 CEST 2005


On 9/29/05, Raymond Hettinger <raymond.hettinger at verizon.net> wrote:
> FWIW, I scanned the standard library for all the and/or pairings where a
> conditional expression was applicable.  This sampling can serve as a
> reference for what "typical" uses would look like in real Python code as
> created by a number of different authors.
>
> It only takes about five minutes to try out a given syntax proposal on
> all the fragments listed below.  That short exercise provides an
> excellent insight into the look and feel of each proposal in real world
> code.

I did this for my favorite proposal, and ended up with the list shown
further down below.

I think they all looks great!

The only problem is that it's not easy to come up with a regex-based
way to transform

    C and X or Y

into

    X if C else Y

because it's hard to determine where C starts. So I recommend that
people leave existing and/or code alone but start writing if/else
expressions in new code only. After all there's nothing wrong with
and/or.

cgitb.py:         file = os.path.abspath(file) if file else '?'
cgitb.py:         formatter = html if self.format == "html" else text
compileal1.py:                 cfile = fullname + ('c' if __debug__ else 'o')
csv.py:                            a if (quotes[a] > quotes[b]) else
b, quotes.keys())
csv.py:                            a if (delims[a] > delims[b]) else
b, delims.keys())
csv.py:                     modes[char] = reduce(lambda a, b: a if
a[1] > b[1] else b,
DocXMLRPCServer.py:         anchor = (cl.__name__ if cl else '') + '-' + name
fileinput.py:                                    "*" if isfirstline()
else "", line)
formatter.py:             self.writer.send_paragraph((1) if blankline else 0)
gettext.py:         __builtin__.__dict__['_'] = self.ugettext if
unicode else self.gettext
imaplib.py:             l = map(lambda x:'%s: "%s"' % (x[0], '"
"'.join(x[1]) if x[1][0] else ''), l)
imputil.py: _suffix_char = 'c' if __debug__ else 'o'
keyword.py:     iptfile = args[0] if args else "Python/graminit.c"
pickle.py:             self.write(NEWTRUE if obj else NEWFALSE)
pickle.py:             self.write(TRUE if obj else FALSE)
pickletools.py:                                  "<unknown>" if pos is
None else pos,
py_compile.py:         cfile = file + ('c' if __debug__ else 'o')
pydoc.py:     return re.sub('^ *\n', '', rstrip(result)) if result else ''
pydoc.py:         anchor = (cl.__name__ if cl else '') + '-' + name
pydoc.py:         lhs = '<strong>%s</strong> = ' % name if name else ''
pydoc.py:         contents = [doc + '\n'] if doc else []
pydoc.py:             line = (name + ' = ' if name else '') + repr
pydoc.py:         line = (self.bold(name) + ' = ' if name else '') + repr
pydoc.py:             host = '127.0.0.1' if (sys.platform == 'mac')
else 'localhost'
pydoc.py:             font = ('helvetica', 8 if sys.platform == 'win32' else 10)
robotp~1.py:         return (self."Allow" if allowance else
"Disallow")+": "+self.path
telnet~1.py:                             'DO' if cmd == DO else
'DONT', ord(opt))
telnet~1.py:                             'WILL' if cmd == WILL else
'WONT', ord(opt))
thread~1.py:                    "s" if n!=1 else "")
token.py:     inFileName = args[0] if args else "Include/token.h"
tokenize.py:                     yield (parenlev > NL if 0 else NEWLINE,
unittest.py:         return doc.split("\n")[0].strip() if doc else None
unittest.py:         return doc.split("\n")[0].strip() if doc else None
unittest.py:                             (run, run != "s" if 1 else
"", timeTaken))
urllib.py:             safe_map[c] = c if (c in safe) else ('%%%02X' % i)
urllib2.py:             type = 'I' if file else 'D'
xdrlib.py:                 print 'succeed' if pred(x) else 'failed', ':', x
xmlrpclib.py:             write("1" if value else "0")

--
--Guido van Rossum (home page: http://www.python.org/~guido/)


More information about the Python-Dev mailing list