[Python] chiarimento valore ritornato da una funzione

Simone Federici s.federici a gmail.com
Lun 30 Maggio 2011 14:35:40 CEST


get_dirs = lambda x : [d for d in os.listdir(x) if os.path.isdir(d)]

get_dirs(".")




2011/5/30 Massimo Capanni <massimo.capanni a gmail.com>

> In effetti quella che ho postato e' la prima versione del programma,
> abbastanza *rozza* :)
>
> Vedo di sperimentare i tuoi suggerimenti, grazie
>
>
> Il 30 maggio 2011 14:16, Lorenzo Sutton <lsutton a libero.it> ha scritto:
> > Ciao Massimo,
> >
> > Massimo Capanni wrote:
> >> Buongiorno a tutti,
> >>
> >> ho appena realizzato una funzione che ha uno strano comportamento a
> >> seconda di un certo input.
> >>
> >> La funzione e' questa:
> >>
> >> =======================================
> >> def subfolder(cartella):
> >>     sotto_cartelle = [] # ritorna una lista di cartelle
> >>     stop = 0 # livello di profondita' delle sottocartelle
> >>     for root, dirs, files in os.walk(cartella):
> >>         if stop == 1:
> >>             return sotto_cartelle
> >>         else:
> >>             for i in dirs:
> >>                 sotto_cartelle.append(os.path.join(root,i))
> >>             stop = stop + 1
> >>     return sotto_cartelle (X)
> >> =======================================
> >>
> >> in pratica passo alla funzione una cartella e mi restituisce una lista
> >> delle sottocartelle di primo livello nell'albero della directory.
> > Sei sicuro che non si possa fare in maniera pių semplice per avere solo
> > il primo sotto-livello?
> >
> > - Sempre con os.walk in teoria ti basta una sola riga... Considera il
> > secondo elemento della prima tripla che ottieni (fai delle prove con
> print)
> >
> > - Oppure considera os.listdir combinato con os.path.isdir ...
> >
> > In entrambi i casi occhio ai path relativi VS path assoluti a seconda di
> > quello che devi fare e dell'input che dai alla funzione.
> >
> > Giusto per darti un altro punto di vista ;)
> >
> > Lorenzo.
> >> Ad esempio:
> >> cartella = c:
> >>
> >> Sottocartelle:
> >> c:\pippo
> >> c:\pluto
> >> c:\paperino
> >> ...
> >>
> >> Successivamente eseguo questa porzione di codice in una parte del
> programma,
> >> con il quale ricavo le sottocartelle di ogni sottocartella di primo
> livello:
> >>
> >> =======================================
> >>     lista_cartelle = [] # lista delle
> >>     temp  = []
> >>     temp2 = []
> >>
> >>     temp = subfolder(cartella) # inserisco la lista delle cartelle di
> >> primo livello
> >>
> >>     for i in temp:
> >>         temp2 = []
> >>         temp2 = subfolder(i) # contiene la lista delle sottocartelle
> >> della cartella 'i'
> >>
> >>         for j in temp2:
> >>             lista_cartelle.append(j)
> >> =======================================
> >>
> >> adesso succede che se ometto dalla funzione subfolder() la riga
> >> segnata con (X) [return sotto_cartelle], il programma si blocca con un
> >> errore perche' se una delle sottocartelle di primo livello e' vuota,
> >> il ciclo "for j in temp2" si ferma con un Nonetype error.
> >>
> >> Tuttavia se inserisco la riga (X) di ritorno del valore il programma
> funziona.
> >> Quello che non capisco e' che in ogni caso dovrei trovare una cartella
> >> vuota e non un valore None.
> >>
> >> Avete idea di questo strano comportamento?
> >>
> >> massimo
> >> _______________________________________________
> >> Python mailing list
> >> Python a lists.python.it
> >> http://lists.python.it/mailman/listinfo/python
> >>
> > _______________________________________________
> > Python mailing list
> > Python a lists.python.it
> > http://lists.python.it/mailman/listinfo/python
> >
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>
-------------- parte successiva --------------
Un allegato HTML č stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20110530/06b5711d/attachment-0001.html>


Maggiori informazioni sulla lista Python