"no variable or argument declarations are necessary."

Antoon Pardon apardon at forel.vub.ac.be
Thu Oct 6 02:44:41 EDT 2005


Op 2005-10-06, Bengt Richter schreef <bokr at oz.net>:
> On 5 Oct 2005 09:27:04 GMT, Duncan Booth <duncan.booth at invalid.invalid> wrote:
>
>>Antoon Pardon wrote:
>>
>>> It also is one possibility to implement writable closures.
>>> 
>>> One could for instace have a 'declare' have the effect that
>>> if on a more inner scope such a declared variable is (re)bound it
>>> will rebind the declared variable instead of binding a local name.
>>
>>That is one possibility, but I think that it would be better to use a 
>>keyword at the point of the assigment to indicate assignment to an outer 
>>scope. This fits with the way 'global' works: you declare at (or near) the 
>>assignment that it is going to a global variable, not in some far away part 
>>of the code, so the global nature of the assignment is clearly visible. The 
>>'global' keyword itself would be much improved if it appeared on the same 
>>line as the assignment rather than as a separate declaration.
>>
>>e.g. something like:
>>
>>var1 = 0
>>
>>def f():
>>  var2 = 0
>>
>>  def g():
>>     outer var2 = 1 # Assign to outer variable
>>     global var1 = 1 # Assign to global
>
> IMO you don't really need all that cruft most of the time. E.g., what if ':='
> meant 'assign to variable wherever it is (and it must exist), searching according
> to normal variable resolution order (fresh coinage, vro for short ;-), starting with
> local, then lexically enclosing and so forth out to module global (but not to builtins).'

Just some ideas about this

1) Would it be usefull to make ':=' an expression instead if a
   statement?

I think the most important reason that the assignment is a statement
and not an expression would apply less here because '==' is less easy
to turn into ':=' by mistake than into =

Even if people though that kind of bug was still too easy

2) What if we reversed the operation. Instead of var := expression,
   we write expression =: var.

IMO this would make it almost impossible to write an assignment
by mistake in a conditional when you meant to test for equality.

-- 
Antoon Pardon



More information about the Python-list mailing list