İç içe geçmiş bir işleve yapılan çağrıda ek parantezler, Mark Pilgrim'in Dive Into Python Kitabının 6. modülündeki modülünü inceliyorum ve bu kod return [getFileInfoClass(f)(f) for f in fileList]
'un yaptıklarına şaşırdım. getFileInfo yuvalanmış bir işlev ve yinelenen (f), ekstra parantez için ne olduğunu merak ediyordum. Birinin bana yardımcı olabileceğini umuyordum. İşte tam fonksiyon bulunuyor: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]
Bu girinti bozuk görünüyor. Lütfen kodu girintisiz bir şekilde yapıştırmayı deneyin, tümünü seçin, ardından düzenleyici araç çubuğundaki '{}' düğmesine basın. –
Sanırım dönüştr (modül, alt sınıf) ve getattr (modül, alt sınıf) ya da FileInfo ''geri dönüş getattr (modül, alt sınıf, FileInfo) olarak yeniden yazılabilir. Sorunuza cevap vermek için 'getFileInfoClass (f) ', daha sonra tek bir argümanla örneklenen bir sınıf döndürüyor gibi görünmektedir, f. Yani yaptığınız her dosya için bir sınıfın örneklerinin bir listesini oluşturmaktır. – Shashank
Bu, sorumu yanıtladı. Teşekkürler. – user3243986