Hi Pythons,
ich weiss nicht, ob es euch interessiert :
die builtin-Funktion sum() geht unter MacPython 2.3 nicht...wenn man dieses abenteuerliche Update auf 2.4.1 ( official unofficial ) macht, klappt es.
Nur für die, die sich über "invalid syntax" wundern und in der Doku : "since python ver. 2.3" lesen
Gruss,
Gunnar ( der auch mal etwas bemerkt hat )
Besserwisser : sum() geht unter Macpython 2.3 nicht
Bist Du sicher das `sum()` in 2.3 nicht funktioniert? Kann ich mir kaum vorstellen. Was ich mir eher vorstellen könnte ist, das Du innerhalb der Klammern von `sum()` einen Generator-Ausdruck geschrieben hast. Das ist in 2.3 natürlich ungültige Syntax.
Hi Blackjack,
sicher ist bei mir garnichts
Aber den bemängelten Code will ich euch nicht vorenthalten :
In der Doku steht dazu :
Gruss,
Gunnar
sicher ist bei mir garnichts
Aber den bemängelten Code will ich euch nicht vorenthalten :
Code: Alles auswählen
all = float(sum(getsize(join(root, name)) for name in files))/1024/1024
Ich habe es so verstanden als das meine Lösung der korrekte Weg ist. Aber ich lass mich gerne belehren, mein Pythonwissen ist noch sehr beschränkt.sum( sequence[, start])
Sums start and the items of a sequence, from left to right, and returns the total. start defaults to 0. The sequence's items are normally numbers, and are not allowed to be strings. The fast, correct way to concatenate sequence of strings is by calling ''.join(sequence). Note that sum(range(n), m) is equivalent to reduce(operator.add, range(n), m) New in version 2.3.
Gruss,
Gunnar
-
- User
- Beiträge: 670
- Registriert: Sonntag 15. Januar 2006, 18:42
- Wohnort: Celle
- Kontaktdaten:
Genau wie BlackJack es gesagt hat: Du benutzt eine Generator-Comprehension, die's in Python 2.3 noch nicht gibt.
Folgendes sollte tun:
--- Heiko.
Folgendes sollte tun:
Code: Alles auswählen
all = float(sum([getsize(join(root, name)) for name in files]))/1024/1024
Danke ihr Beiden,
dann ist das Beispiel in der Doku allerdings unpassend, denn da steht es so :
kurz darunter eine Anmerkung "New in 2.3"
Heiko,
kannst du mir erklären, was der Interpreter in deinem Beispiel anders macht ?
Gruss,
Gunnar
dann ist das Beispiel in der Doku allerdings unpassend, denn da steht es so :
Code: Alles auswählen
import os
from os.path import join, getsize
for root, dirs, files in os.walk('python/Lib/email'):
print root, "consumes",
print sum(getsize(join(root, name)) for name in files),
print "bytes in", len(files), "non-directory files"
if 'CVS' in dirs:
dirs.remove('CVS') # don't visit CVS directories
Heiko,
kannst du mir erklären, was der Interpreter in deinem Beispiel anders macht ?
Gruss,
Gunnar
-
- User
- Beiträge: 670
- Registriert: Sonntag 15. Januar 2006, 18:42
- Wohnort: Celle
- Kontaktdaten:
Du liest die Doku zu Python 2.4, oder? In der 2.3-er Doku steht es sicherlich nicht so, sondern wie ich es geschrieben habe. Und wenn sich ein Beispiel auf die Funktion sum bezieht und auch der Kommentar auf diese Funktion bezieht, kann ich nicht erkennen warum das verwenden eines syntaktischen Strukturelements (das nun mal rein gar nichts mit sum zu tun hat, nämlich einer Generator-Expression) irgendwas daran ändert dass die Funktion seit 2.3 unterstützt wird.dann ist das Beispiel in der Doku allerdings unpassend, denn da steht es so :
Der Unterschied zwischen den beiden? Das erste ist eine sogenannte List-Comprehension, das zweite eine Generator-Comprehension:
Code: Alles auswählen
listcomp = [x**0.5 for x in range(10)]
gencomp = (x**0.5 for x in range(10))
Sonst: die Python-Doku hält auch noch 'ne ganze Menge über den Unterschied zwischen Generator- und List-Comprehensions bereit.
--- Heiko.
Danke für das aufzeigen des Unterschieds zwischen den beiden Comprehensions.
Ja ich lese die 2.4 Doku, aber programmiere eben auch für die 2.3 Version. Mit eurem Hintergrundwissen wäre das kein Stolperstein für mich gewesen, aber so wurde ich tatsächlich durch das Beispiel fehlgeleitet.
Wie auch immer,
bis demnächst und danke für die Unterstützung. Hier im Forum erfährt man wenigstens immer was man wissen will/muss.
Gruss,
Gunnar
Ja ich lese die 2.4 Doku, aber programmiere eben auch für die 2.3 Version. Mit eurem Hintergrundwissen wäre das kein Stolperstein für mich gewesen, aber so wurde ich tatsächlich durch das Beispiel fehlgeleitet.
Wie auch immer,
bis demnächst und danke für die Unterstützung. Hier im Forum erfährt man wenigstens immer was man wissen will/muss.
Gruss,
Gunnar