ローカル変数で「L」や「D」を使うのはダメプログラマ

pashango_pさん曰く:

本当にローカル変数でlistやdictを表すために「L」とか「D」を使っていたとしたら、相当なダメプログラマですよ。

わたしはそこまでは思いませんが、pashango_pさんによると、ローカル変数名として「L」や「D」を使うのはダメプログラマだそうです。

いっときますけど、わたしの意見じゃないですよ? あくまでpashango_pさんの言ったことなんで、そこは勘違いするのは勘弁してね。



ところで、Python標準添付であるurllib2.pyより:

def randombytes(n):
    """Return n random bytes."""
    # Use /dev/urandom if it is available.  Fall back to random module
    # if not.  It might be worthwhile to extend this function to use
    # other platform-specific mechanisms for getting random bytes.
    if os.path.exists("/dev/urandom"):
        f = open("/dev/urandom")
        s = f.read(n)
        f.close()
        return s
    else:
        L = [chr(random.randrange(0, 256)) for i in range(n)]
        return "".join(L)


あるいはDjangoのutils/_decimal.pyより:

    def _increment(self, round=1, context=None):
        """Special case of add, adding 1eExponent

        Since it is common, (rounding, for example) this adds
        (sign)*one E self._exp to the number more efficiently than add.

        For example:
        Decimal('5.624e10')._increment() == Decimal('5.625e10')
        """
        if self._is_special:
            ans = self._check_nans(context=context)
            if ans:
                return ans

            return Decimal(self) # Must be infinite, and incrementing makes no difference

        L = list(self._int)
        L[-1] += 1
        spot = len(L)-1
        while L[spot] == 10:
            L[spot] = 0
            if spot == 0:
                L[0:0] = [1]
                break
            L[spot-1] += 1
            spot -= 1
        ans = Decimal((self._sign, L, self._exp))

        if context is None:
            context = getcontext()
        if round and context._rounding_decision == ALWAYS_ROUND:
            ans = ans._fix(context)
        return ans


さらにはMercurialのkeepalive.pyより: (L が list ではなく len のこととして使われている)

    def read(self, amt=None):
        # the _rbuf test is only in this first if for speed.  It's not
        # logically necessary
        if self._rbuf and not amt is None:
            L = len(self._rbuf)
            if amt > L:
                amt -= L
            else:
                s = self._rbuf[:amt]
                self._rbuf = self._rbuf[amt:]
                return s

        s = self._rbuf + self._raw_read(amt)
        self._rbuf = ''
        return s


pashango_pさんの言に従うと、Python開発陣にもMercurial開発陣にもDjango開発陣にもダメプログラマーがいるってことですね!


#いやまて、Mercurialは 'L' を 'list' としてではなく 'len' として使ったから、「list として 'L' を使うのはダメプログラマ」には当てはまらないかも?!