Tautologies are overrated

[code]
$ python2.4

True,False = False, True
True
False
False
True
a = True
if a:
… print ‘Hello World’

if not a:
… print ‘Hello World’

Hello World
[/code]

I am a big-time Python fan but this is crazy!

(discovered via python-list)

Published by swaroop

www.swaroopch.com

13 replies on “Tautologies are overrated”

  1. A similar problem exists for keywords:

    >>> abs(-1)
    1
    >>> abs=1
    >>> abs(-1)
    Traceback (most recent call last):
    File “”, line 1, in ?
    TypeError: ‘int’ object is not callable

    Contrast with Ruby

    irb(main):001:0> -1.abs
    => 1
    irb(main):002:0> -1.abs =3
    NoMethodError: undefined method `abs=’ for -1:Fixnum
    from (irb):2
    irb(main):003:0>

  2. This is not crazy. You have assigned the ‘False’ bool type to ‘a’, and you get what you expected. :-)

    Actually, python must deny the use of True and False as l-values.

  3. Aggelos: Yes, that actually works :| , I guess they have `True` and `False` as just instances of the `bool` class and hence things like these are possible i.e. they are not keywords, they are just objects which can be manipulated like any other.

  4. True and False are not constants in Python. In fact they are the only possible instances of the new ‘bool’ type.

    >>> c = bool(5)
    >>> c
    True
    >>> c = bool(0)
    >>> c
    False

    However Python should be setting these names as immutable, similar to the None keyword in 2.4

  5. Anything that is not a keyword can be overrided, and there are very few keywords on purpose! It’s not a wart, it’s a design decision. Live with it :)

    Python is for consenting adults.

  6. john compared ruby properties with python names
    Not a good comparision

    I think this is closer to what john demonstrated in ruby
    using python properties

    >>>class absInt(int):
    … abs = property(fget=lambda self: abs(self))
    >>> i = absInt(-1)
    >>> i.abs
    1
    >>> i.abs = 5
    Traceback (most recent call last):
    File “”, line 1, in ?
    AttributeError: can’t set attribute
    >>>

    I think i like the idea of limiting the number of keywords the way python does.

Comments are closed.