On Sat, Dec 23, 2017, 09:23 William Rose, <william27.07...@gmail.com> wrote:

 > I had an idea that it could be helpful to have local functions as
 > well as normal ones. They would be called the same way as normal
 > ones but def would be replaced by internal and inside they could
 > only access variables they have defined and inputs to them so no
 > global variables or class variables. I think this could be used
 > to save people accidentally changing variables you dont' want to
 > change when updating your code. Let me know what you think!

I suspect you misunderstand how variables (actually, name bindings)
work in Python.  If you do understand, I don't understand what you're
guarding against.  With current semantics, code inside a function
cannot change a global binding, although it can refer to one:

>>> def f():
...  x=3
...  return x
... 
>>> def g():
...  return x
... 
>>> x = 0
>>> y = f()                # Changes x?
>>> z = g()
>>> print("x =", x, "y =", y, "z =", z)
x = 0 y = 3 z = 0          # Nope.
>>> def h():
...  y = x + 5
...  x = y                 # Changes x?
...  return x
... 
>>> w = h()                # Nope, it crashes your program instead!
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in h
UnboundLocalError: local variable 'x' referenced before assignment

You *can* use the global and nonlocal declarations to override the
normal automatic assumption that names are local to the scope in
which they are bound:

>>> def a():
...  global x
...  x = 42
...  return x
... 
>>> a()
42
>>> x
42

Prohibiting this last would be un-Pythonic, IMO (violates the
"consenting adults" principle).  Similarly for class variables, which
can only be accessed using attribute notation.  There are also
conventions, prefixing "_" or "__", which indicate "this is private,
mess with it at your own risk", and actually munge the name internally
to make it impossible to access accidentally (including in derived
classes).


_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to