Re: "no variable or argument declarations are necessary."
Available news archives: comp.lang.tcl - comp.lang.python - comp.security.firewalls - sci.crypt - comp.lang.php - comp.lang.javascript
Google
 
Web news.hping.org


comp.lang.python archive

Re: "no variable or argument declarations are necessary."

From: Duncan Booth <duncan.booth@invalid.invalid>
Date: Wed Oct 05 2005 - 13:16:47 CEST

Antoon Pardon wrote:
> As far as I understand people don't like global very much so I don't
> expect that a second keyword with the same kind of behaviour has
> any chance.

That's why the behaviour I suggest is different than the current behaviour
of global. Arguments against global (it is the only non-executable
statement in Python & it is confusing because people don't understand the
declaration goes inside the function instead of at global scope) don't
apply.

>
>> 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
>
> And what would the following do:
>
> def f():
>
> var = 0
>
> def g():
>
> var = 1
>
> def h():
>
> outer var = 2 * var + 1
>
> h()
> print var
>
> g()
> print var
>
> f()
>
It would follow the principle of least surprise and set the value of var in
g() of course. The variable in f is hidden, and if you didn't mean to hide
it you didn't need to give the two variables the same name.

So the output would be:
3
0

(output verified by using my hack for setting scoped variables:)
-------------------------------
from hack import *
def f():
  var = 0

  def g():
    var = 1

    def h():
      assign(lambda: var, 2 * var + 1)

    h()
    print var

  g()
  print var

f()
-------------------------------
Received on Sat Oct 15 04:10:08 2005