neongelbe
Anmeldungsdatum: 10. September 2009
Beiträge: Zähle...
|
Wenn ich eine Funktion schreibe, sollte ich dann darauf achten, dass sie standalone funktioniert oder ist es auch in Ordnung, die Funktion auf eine andere Funktion zugreifen zu lassen, beispielsweise beim Abfragen irgendwelcher Nummern, ungefähr: def frage_nummer():
#Code
return nummer
def nutze_nummer():
beebop = frage_nummer() Oder richtet man sich das ein, wie es gerade beliebt?
|
Lysander
Anmeldungsdatum: 30. Juli 2008
Beiträge: 2669
Wohnort: Hamburg
|
Nein, das ist vollkommen in Ordnung! Letztlich entstehen Programme ja auf genau diese Art und Weise 😉
|
snafu1
Anmeldungsdatum: 5. September 2007
Beiträge: 2133
Wohnort: Gelsenkirchen
|
Man erstellt Funktionen in der Regel für bestimmte Aufgaben. Eine große Aufgabe kann man sinnvollerweise in kleine Aufgaben einteilen und damit auch in einer Art Hauptfunktion weitere Funktionen zur Erledigung der Teilaufgaben einsetzen. Der springende Punkt ist vor allem die Wiederverwendbarkeit.
|
snafu1
Anmeldungsdatum: 5. September 2007
Beiträge: 2133
Wohnort: Gelsenkirchen
|
Lysander schrieb: Nein, das ist vollkommen in Ordnung! Letztlich entstehen Programme ja auf genau diese Art und Weise 😉
Nicht alle. Manche bestehen auch aus eine 35-zeiligen main()-Funktion (ohne Doku). 😉
|
Lysander
Anmeldungsdatum: 30. Juli 2008
Beiträge: 2669
Wohnort: Hamburg
|
snafu1 schrieb: Lysander schrieb: Nein, das ist vollkommen in Ordnung! Letztlich entstehen Programme ja auf genau diese Art und Weise 😉
Nicht alle. Manche bestehen auch aus eine 35-zeiligen main()-Funktion (ohne Doku). 😉
Ok, ergänze "komplexere" 😉
|
neongelbe
(Themenstarter)
Anmeldungsdatum: 10. September 2009
Beiträge: 136
|
Also aus Gründen der Wiedervendbarkeit besser auf kleine Funktionen setzen, beispielsweise eine Variable mit einer Website befüllen: >>> import urllib
>>> url = "http://ubuntuusers.de"
>>> def get_uu():
... uu = urllib.urlopen(url).read()
... return uu und danach irgendwas damit machen: >>> def print_ubuntu():
... uu_in = get_uu()
... if "Ubuntu" in uu_in:
... print "Ubuntu" damit man zum Beispiel uu auch noch in anderen Funktionen verwenden kann? Statt zum Beispiele alles in eine Funktion zu schreiben, die uu evtl auch zurückgeben könnte, was dann aber unter Umständen gar nicht genutzt wird, weil das Skript vorher endet (oder sowas)?
|
Lysander
Anmeldungsdatum: 30. Juli 2008
Beiträge: 2669
Wohnort: Hamburg
|
Prinzipiell ja. wobei Dein Beispiel jetzt eher schlecht gewählt ist! Zum einen kann man mit der Funktion get_uu() jede beliebige Seite öffnen, Du musst nur url im globalen Namespace mit einer anderen URL befüllen 😉 Sinnvoller wird es erst, wenn man der Funktion einen Parameter übergeben kann, der den String der URL enthalten soll:
| def get_web_page(url):
return urllib.urlopen(url).read()
|
Man sieht an der Siplizität dieser Funktion jedoch, dass man das nicht unbedingt in eine Funktion auslagern muss. Das käme jetzt drauf an, wie oft man so etwas braucht. Was man häufiger mal macht, wäre z.B. so etwas:
| def load(filename):
""" liest den Inhalt einer (Textdatei) ein und liefert ihn als String zurück """
with open(filename, "r") as infile:
return infile.read()
|
Arbeite doch erst einmal das ein oder andere Tutorial und Buch durch. Dabei lernst Du dann schon ein wenig intuitiv die Grundzüge. Letztlich ist aber genau die Fähigkeit, wie man etwas strukturiert und aufteilt die Essenz dessen, was gute Programmierung ausmacht. Das kann man halt nur lernen und ein Gespühr dafür entwickeln. Ein totsicheres Kochrezept gibt es da nicht.
|
nox24
Anmeldungsdatum: 8. Februar 2008
Beiträge: 1260
Wohnort: /home/karlsruhe/
|
Lysander schrieb:
Was man häufiger mal macht, wäre z.B. so etwas:
| def load(filename):
""" liest den Inhalt einer (Textdatei) ein und liefert ihn als String zurück """
with open(filename, "r") as infile:
return infile.read()
|
Hallo Lysander, was macht diese Funktion genau? Und was wäre wenn ich statt infile den handler einsetze? Ich bin Python Anfänger und tue mich schwer damit.
|
Lysander
Anmeldungsdatum: 30. Juli 2008
Beiträge: 2669
Wohnort: Hamburg
|
nox24 schrieb: Lysander schrieb:
Was man häufiger mal macht, wäre z.B. so etwas:
| def load(filename):
""" liest den Inhalt einer (Textdatei) ein und liefert ihn als String zurück """
with open(filename, "r") as infile:
return infile.read()
|
was macht diese Funktion genau?
Das steht doch im Doc-String!?!
Und was wäre wenn ich statt infile den handler einsetze?
Was ist denn "der handler" - ich kenne nur "den Wendler" 😀 "infile" ist einfach nur ein Name. Du kannst da einen beliebigen Bezeichner hinschreiben, "foO", "bar", "handler" oder auch "wendler" 😉
Ich bin Python Anfänger und tue mich schwer damit.
Naja, es ist noch kein Meister vom Himmel gefallen. Aber diese paar Zeilen solltest Du anhand der Dokumentation einfach mal selber genauer versuchen nachzuvollziehen. Schau Dir die Funktionsbeschreibungen von open() und file.read() einfach mal an. Zudem hättest Du es einfach mal ausprobieren können. Und wie schon gesagt steht ja im Doc-String eigentlich alles, was diese Funktion tut 😉
|
nox24
Anmeldungsdatum: 8. Februar 2008
Beiträge: 1260
Wohnort: /home/karlsruhe/
|
Ok Danke soweit. Ich tue mich schwer das englische Doc auf python.org zu lesen. Muss man eigentlich den Dateinamen test.txt an die markierten Stellen schreiben? def load(filename):
""" liest den Inhalt einer (Textdatei) ein und liefert ihn als String zurück """
with open(filename, "r") as infile:
return infile.read() oder nur unter open() ? Edit: dein Vorschlag in einem anderen Thread lässt bei mir viele Fragen offen. So, dass ich gerade viel lese um intelligent die Fragen stellen zu können. Ich schreibe dort dann zurück, sobald ich die Fragen formuliert habe. Danke!
|
Lysander
Anmeldungsdatum: 30. Juli 2008
Beiträge: 2669
Wohnort: Hamburg
|
nox24 schrieb: Ok Danke soweit. Ich tue mich schwer das englische Doc auf python.org zu lesen.
Da musst Du "durch". Nach einiger Übung und dem Nachschlagen von unbekannten Wörtern hat man es schnell drauf. Technisches Englisch ist nicht so kompliziert.
Muss man eigentlich den Dateinamen test.txt an die markierten Stellen schreiben?
Überlege doch mal, was die markierten Stellen im Code für eine Funktion haben? Dann kommst Du da selber drauf 😉
|
neongelbe
(Themenstarter)
Anmeldungsdatum: 10. September 2009
Beiträge: 136
|
Villeicht hilft es dir, die Funktion einfach mal in den Interpreter zu tippen und aufzurufen. ☺
|