PyWart: Language missing maximum constant of numeric types!

Wolfgang Meiners WolfgangMeiners01 at web.de
Sun Feb 26 12:56:46 CET 2012


Am 25.02.12 18:54, schrieb MRAB:
>> If there is no limit for len(string), why not simply use
>>
>> # get_limit() returns None if there is no limit
>> maxlength = get_limit()
>> if maxlength and (len(string)<= maxlength):
>>      allow_passage()
>> else:
>>      deny_passage()
>>
> That should be:
> 
> if maxlength is not None and len(string) <= maxlength:

Take a look at

http://docs.python.org/library/stdtypes.html

where  you can read:
=========================================================================
Any object can be tested for truth value, for use in an if or while
condition or as operand of the Boolean operations below. The following
values are considered false:


      None

      False

      zero of any numeric type, for example, 0, 0L, 0.0, 0j.

      any empty sequence, for example, '', (), [].

      any empty mapping, for example, {}.

      instances of user-defined classes, if the class defines
      __nonzero__() or __len__() method, when that method returns the
      integer zero or bool value False. [1]

All other values are considered true — so objects of many types are
always true.
==========================================================================

That means:
if maxlength and (len(string) <= maxlength):

is equivalent to
if (maxlength is not None) and (len(string) <= maxlength):

which is more complicated to type and -in my opinion- not so intuitive.
But because it is equivalent, it is a matter of taste, what to use.

Wolfgang



More information about the Python-list mailing list