Python's "only one way to do it" philosophy isn't good?
doug at alum.mit.edu
Sat Jun 23 20:56:35 CEST 2007
Steven D'Aprano <steve at REMOVE.THIS.cybersource.com.au> writes:
>> So one use for macros would be so that I can define "let" and "set"
>> statements so that I might code like this:
>> let longVariableName = 0
>> set longVarableName = foo(longVariableName)
>> Then if longVarableName didn't already exist, an error would be
>> raised, rather than a new variable being automatically created for me.
> So "let" is the initial declaration, and "set" modifies the existing
> What happens is you declare a variable twice?
The same thing that would happen in Perl or any other language that
supports this type of variable declaration and setting: it would raise
The big debate you get next, is then whether you should be allowed to
shadow variables in nested scopes with new variables of the same
name. Given that Python already allows this, my guess is that the
answer should be yes.
> How long did it take you to write the macros, and use them, compared
> to running Pylint or Pychecker or equivalent?
An hour? Who cares? You write it once and then you have it for the
rest of your life. You put it in a widely available library, and then
*every* programmer also has it for the rest of their lives. The
amortized cost: $0.00. The value: priceless.
> But if you really want declarations, you can have them.
>>>> import variables
>>>> variables.declare(x=1, y=2.5, z=[1, 2, 4])
>>>> variables.x = None
>>>> variables.w = 0
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "variables.py", line 15, in __setattr__
> raise self.DeclarationError("Variable '%s' not declared" % name)
> variables.DeclarationError: Variable 'w' not declared
Thanks, but that's just too syntactically ugly and verbose for me to
use. Not only that, but my fellow Python programmers would be sure to
come and shoot me if I were to code that way.
One of the reasons that I want to use Python is because I like reading
and writing code that is easy to read and looks good. I don't want to
bend it to my will at the expense of ugly looking code.
More information about the Python-list