Wenn Python 'global' definiert, dh. zulässt, warum sollte es nicht eingesetzt werden?
Für eine pro/con Aussage wäre ich dankbar

Es liegt IMHO nicht in der Verantwortung einer Sprache, alles, von dem abgeraten wird, auch zu verbieten. Letztlich auch gar nicht möglich. Selbst wenn es das ``global`` Statement nicht gäbe, könnte man mit dem Rest noch genügend schlechten oder gar gefährlichen Code schreiben...gNeandr hat geschrieben:Wenn Python 'global' definiert, dh. zulässt, warum sollte es nicht eingesetzt werden?
Weil man nicht alles, was man tun kann, auch immer tun sollte.gNeandr hat geschrieben:Wenn Python 'global' definiert, dh. zulässt, warum sollte es nicht eingesetzt werden?
Man schafft sich Abhängigkeiten die nach einiger Zeit nur noch schwer zu durchblicken sind. Ja, global kann durchaus mal nützlich sein, aber in über 99% der Fälle wo jemand es verwenden möchte ist der Einsatz nicht gerechtfertigt. Unter Python 3 gibt es noch nonlocal das nicht so dramatische Auswirkungen auf den globalen Namensraum hat.gNeandr hat geschrieben:Wenn Python 'global' definiert, dh. zulässt, warum sollte es nicht eingesetzt werden?
Code: Alles auswählen
# closure to handle global parameters
def gParam():
parameter = {}
def set(n, x):
# just monitoring
print (n + " is:" + str(x))
parameter[n] = x
def get(n):
return parameter[n]
return set, get
gSet,gGet=gParam()
Code: Alles auswählen
gSet = ('parameterA', anyvalue)
localPa = gGet('parameterA')
Dafür, dass ``goto`` ein "last resort" sein soll, wird es in echten Programmen - u.a. im C-Quelltext von Python und im Linux-Kernel - aber ganz schön oft verwendet. Wie passt das mit deiner Aussage zusammen? Sind das für dich allesamt schlechte Programmierer oder setzt du eine sehr spezielle Definition von "last resort" voraus?Darii hat geschrieben:global ist der "last resort". Genau wie goto in C.
Gerne lerne ich dazu! In einem anderen Thread habe ich darauf hingewiesen, dass ich Python Neuling bindarktrym hat geschrieben:...
Nebenbei, dein Beispiel ist so wenig pythonisch, dass geht auch als Antipattern durch(Getter/Setter, Unnötige Klammern, Stringadditionen,...).
Code: Alles auswählen
from __future__ import print_function
foo = 'foo'
def set_foo(value):
global foo
foo = value
def print_foo():
print(foo)
Code: Alles auswählen
>>> import funwithfoo
>>> funwithfoo.print_foo()
foo
>>> funwithfoo.set_foo('bar')
>>> funwithfoo.print_foo()
bar
>>> import funwithfoo
>>> funwithfoo.print_foo()
bar
Hier.gNeandr hat geschrieben:wo finde ich gute Hinweise zu Getter/Setter in Python?