Code: Alles auswählen
def show_entry(ab, name=None):
if name is not None:
print name, ':', ab.get(name, 'not found, try `meinAdressbuch show | grep -i <NAME>`')
else:
pass # Irgendwas anderes machen.
Code: Alles auswählen
def show_entry(ab, name=None):
if name is not None:
print name, ':', ab.get(name, 'not found, try `meinAdressbuch show | grep -i <NAME>`')
else:
pass # Irgendwas anderes machen.
Das schien mir die beste möglichkeit zu sein 'global' zu vermeiden ohne 'addressbook_filename' an jede Funktion übergeben zu müssen.BlackJack hat geschrieben:Ich sehe nicht so ganz den Mehrwert das in dieser Form in eine Klasse zu stecken.
Ja! Zumindest von der, wie Du es jetzt machst.ltownatze hat geschrieben: Glaubst du ich sollte von der Klassen-Idee abstand nehmen?
Code: Alles auswählen
def main():
[...]
open_addressbook()
[...]
def open_addressbook():
addressbook_filename = 'einschönerdateiname'
Nein, gluecklicherweise geht das nicht. Du suchst Rueckgabewerte.ltownatze hat geschrieben:Ist sowas überhaupt möglich?
Also mit Rückgabewerten lautet die Antwort eigentlich schon "Ja"cofi hat geschrieben:Nein, gluecklicherweise geht das nicht. Du suchst Rueckgabewerte.ltownatze hat geschrieben:Ist sowas überhaupt möglich?
Code: Alles auswählen
def main():
[...]
addressbook_filename = open_addressbook()
[...]
def open_addressbook():
addressbook_filename = 'einschönerdateiname'
[...]
return addressbook_filename
Bezogen auf "die Variable" im Ursprungspost aber dann eben doch "nein"ms4py hat geschrieben: Also mit Rückgabewerten lautet die Antwort eigentlich schon "Ja"
Code: Alles auswählen
addressbook_filename = open_addressbook()
Respekt für das Lesen der Doku, aber Du solltest erst einmal hier gucken Das sind wirklich absolute Baics.ltownatze hat geschrieben: Außerdem hat mich die Python-Doku hier etwas verwirrt.
Um das klarzustellen: `addressbook_filename` ist NICHT dieselbe Variable, wie in der Funktion, sondern enthaelt den Rueckgabewert von `open_addressbook`, d.h. du kannst sie a) aendern, ohne den Wert in der Funktion zu aendern und b) aendert sich der Wert in der Funktion, dann aendert sich nicht der Wert dieser Variablen (es sei denn, du weisst ihr wieder den Rueckgabewert der Funktion zu).ltownatze hat geschrieben:Mit 'return' hatte ich auch schon rumgespielt, bin aber nicht auf diese Idee gekommen:Code: Alles auswählen
addressbook_filename = open_addressbook()
Code: Alles auswählen
In [1]: def foo():
...: a = "test"
...: return a
...:
In [2]: a = 3
In [3]: b = foo()
In [4]: print a, b
------> print(a, b)
(3, 'test')
Eigentlich ging es mir nicht um den Dateinamen sondern um ein Dictionary das aus einer Datei ausgelesen wird und dem/der Namen/Variable/Referenz (k.A. was jetzt der korrekte Begriff ist) 'addressbook' zugeordnet wird. In der Praxis sieht das so aus:Wieso definiert man denn einen Dateinamen innerhalb einer Funktion? Irgend wie kein guter Stil...
Code: Alles auswählen
def main():
[...]
addressbook = open_addressbook(addressbook_filename)
[...]
def open_addressbook(addressbook_filename):
try:
fp = open(addressbook_filename, 'r')
addressbook = json.load(fp)
fp.close()
except IOError:
addressbook = {}
return addressbook
Code: Alles auswählen
with open(filename, "r") as infile:
addressbook = json.load(infile)