seeking deeper (language theory) reason behind Python design choice

Marko Rauhamaa marko at pacujo.net
Thu May 10 18:49:48 EDT 2018


Chris Angelico <rosuav at gmail.com>:
> On Fri, May 11, 2018 at 5:59 AM, Marko Rauhamaa <marko at pacujo.net> wrote:
>> Joking aside, to answer Chris's question, of course you can use a
>> real condition with "while". However, you shouldn't force it or try
>> to avoid "while True". It turns out "while True" is the most natural
>> choice in about half of the while loops.
>
> So if I understand you correctly, you're saying that a real condition
> is better, but "while True" is the best option half the time. In other
> words, "while True" is the ONLY option half the time, since any other
> option would be better.

A real example:

    def split_cmd(self, cmd):
        args = []
        while True:
            match = self.TERM_PTN.match(cmd)
            if match is None:
                return None, None
            args.append(match.group('term'))
            if not match.group('sep'):
                break
            cmd = cmd[match.end(0):]
        verb = args.pop(0).upper()
        return verb, args

You *could* get rid of True. For example:

    def split_cmd(self, cmd):
        args = []
        match = self.TERM_PTN.match(cmd)
        while match is not None:
            args.append(match.group('term'))
            if not match.group('sep'):
                verb = args.pop(0).upper()
                return verb, args
            cmd = cmd[match.end(0):]
            match = self.TERM_PTN.match(cmd)
        return None, None

However, that would be a slight stylistic degradation because

 1. the redundant matching statement is redundant and

 2. an abnormal return is at the bottom of the function.


Marko



More information about the Python-list mailing list