Δημοσιεύτηκε: 30 Ιαν 2012, 17:57
από sokoban4ever
Για το post
viewtopic.php?f=6&t=5094&start=570#p227647

1) O τελεστής "in" (membership operator) της python είναι
για να ελέγχει αν ένα μια μεταβλητή (η ακόμα ένα συγκεκριμένο object για την περίπτωση ελέγχου σε μια λίστα ή tuple κλπ) υπάρχει
σε μια ακολουθία (sequence )όπως strings,tuples,lists,sets

2)
το
Κώδικας: Επιλογή όλων
for Χ in sequence:
print X

εναποθέτει στην μεταβλητή Χ διαδοχικά τιμές από το μηδέν σημείο της sequence εώς το μήκος της ( len(sequence) )
αφού ένα προς ένα έλεγχο κάνει ηδη ο "in" operator
ο explicit έλεγχος ένα προς ένα είναι περιττός (φυσικά γίνεται και έτσι)
αν η ακολουθία σου είχε έχει 1000 αντικείμενα θα έκανε 1000000 loops !!!!

επομένως
o παρακάτω κώδικας
Κώδικας: Επιλογή όλων
for i in self.folders_names:
if name in self.folders_names:
return True
....

μπορεί να γίνει
Κώδικας: Επιλογή όλων
if name in self.folders_names:
return True
else:
return False


Τέλος
στο except clause αντί για pass βάλε
return False
και βάλε το file.close() μαζί με ένα return False σε ένα finally clause

γιατι άν δεν έχεις ονόματα των φακέλων ( folders_names )
με άλλα λόγια έχεις ανύπαρκτα folders_names
τότε το name δεν μπορεί να υπάρχει σε ανύπαρκτα folders_names ;)
οπότε μπορείς να κάνεις έγκαιρα return False


επομένως o κώδικας:
Κώδικας: Επιλογή όλων
try:
self.folders_names = pickle.load(f)
except (EOFError, IOError):
pass
f.close()

μπορεί να γίνει
Κώδικας: Επιλογή όλων
try:
self.folders_names = pickle.load(f)
except (EOFError, IOError):
pass
finally:
f.close()
return False