Hi Sephiroth,
Du scheinst es Dir schwieriger zu machen, als es ist.
Sephiroth hat geschrieben:Das
das gleiche wie
ist kann ich mir ja noch denken, ...
Das stimmt gerade nicht. Wenn Du einen Parameterstring übergibst (das darf nicht der Leerstring sein), dann wird der String s in Elemente gespalten, die durch den Parameterstring getrennt sind. Im zweiten Fall ist das ein Space-Zeichen, darum wird auch nur an Spaces getrennt - und zwar an jedem, auch wenn dabei in der resultierenden Liste ein Leerstring auftaucht.
Im ersten Fall wird kein Parameterstring übergeben, so dass vorgabemäßig an Whitespaces getrennt wird. Dazu gehören neben Space je nach Definition auch die Tabs (horizontal und vertikal), Zeilenvorschub und Zeilenumbruch. Zudem entstehen keine Leerstrings in der resultierenden Liste. Darum mein Beispiel oben mal interaktiv ausgeführt:
Code: Alles auswählen
>>> "a ,\n\nd".split()
['a', ',', 'd']
>>> "a ,\n\nd".split(' ')
['a', '', '', '', '', '', ',\n\nd']
Wie Du siehst ergeben sich ganz andere Resultate.
Sephiroth hat geschrieben:aber wieso sit das das gleiche wie:
Hier wird doch garnicht angezeigt wann der string gesplittet werden soll oder?
nur DAS er gesplittet werden soll, aber nicht das er bei jedem freespace geschnitten werden soll.
s.split() und string.split(s) machen das gleiche, nur dass das Erste eine Methode eines Objekts vom Typ 'str' und das Zweite eine Funktion des Moduls string ist. In beiden Fällen wird bei fehlendem Übergabeparameter der Standardwert, Whitespaces, verwendet.
Im zweiten Fall können zwei Parameter übergeben werden, der erste ist der zu teilende String (s), der zweite der Trenn-String. Intern funktioniert das im ersten Fall auch so, nur dass bei Methoden das Objekt selbst meist automatisch übergeben wird.
Sephiroth hat geschrieben:Also ist die s-variable die momentane Reihe in der die for-schleife steht, die also gesplittet werden soll und dann die wörter gezählt werden.
Also ein string..
Richtig, es ist die im aktuellen Schleifendurchgang eingelesene Zeile. Wenn Du den Typ eines Objekts wissen möchtest, gib einfach folgendes ein:
Sephiroth hat geschrieben:Nochne extra-Frage:Was bewirkt der return befehl in der Funktion?
Der besagt, dass der Wert dahinter zurückgegeben werden soll. Wenn nichts angegeben wird, liefert es None zurück. Inhaltlich ist es egal, ob Du
Code: Alles auswählen
liste = 3
# oder
liste = len(line.split())
# oder
liste = numworte(line)
schreibst. Im normalen Leben ist ja auch 0.3 und 3/10 rein inhaltlich das gleiche. Der Rechenaufwand ist natürlich unterschiedlich.
Grüße,
der Michel
Diese Nachricht zersört sich in 5 Sekunden selbst ...