Sto studiando il modulo di Dive Into Python Book di Mark Pilgrim nel capitolo 6, e sono un po 'bloccato con ciò che fa questa riga di codice return [getFileInfoClass(f)(f) for f in fileList]
. getFileInfo è una funzione annidata e mi chiedevo qual è il duplicato (f), le parentesi extra servono per. Speravo che qualcuno potesse darmi una mano. Ecco la funzione completa:Una parentesi aggiuntiva in una chiamata a una funzione nidificata in Python
def listDirectory(directory, fileExtList):
"get list of file info objects for files of particular extensions"
fileList = [os.path.normcase(f) for f in os.listdir(directory)]
fileList = [os.path.join(directory, f) for f in fileList \
if os.path.splitext(f)[1] in fileExtList]
def getFileInfoClass(filename, module=sys.modules[FileInfo.__module__]):
"get file info class from filename extension"
subclass = "%sFileInfo" % os.path.splitext(filename)[1].upper()[1:]
return hasattr(module, subclass) and getattr(module, subclass) or FileInfo
return [getFileInfoClass(f)(f) for f in fileList]
Quella rientranza sembra rotta. Prova ad incollare il codice senza alcun rientro, seleziona tutto, quindi premi il tasto '{}' nella barra degli strumenti dell'editor. –
Penso che 'return hasattr (module, subclass) e getattr (module, subclass) o FileInfo' possano essere riscritti come' return getattr (module, subclass, FileInfo) '. Per rispondere alla tua domanda, 'getFileInfoClass (f)' sembra restituire una classe che viene quindi istanziata con un singolo argomento, f. Quindi quello che stai facendo è creare un elenco di istanze di alcune classi per ogni file. – Shashank
Questo ha risposto alla mia domanda. Grazie. – user3243986