Lawrence D'Oliveiro <[EMAIL PROTECTED]> writes: > In message <[EMAIL PROTECTED]>, Aaron Brady wrote: > >> On Dec 5, 4:32 am, Lawrence D'Oliveiro <[EMAIL PROTECTED] >> central.gen.new_zealand> wrote: >> >>> The code people write is probably a direct reflection of their thinking >>> processes: For example, slow, plodding, one step at a time, incapable of >>> imaginative leaps, versus those who operate directly on larger patterns >>> at once... >> >> That distinction operates indirectly on smaller patterns. > > Do you find this > > (open, gzip.GzipFile)[Entry.endswith(".gz")](os.path.join(PatchesDir, > Entry), "r") > > complicated or hard to understand?
(aside: it's funny that someone asks Aaron this quesion as he is the one who used to post code that almost nobody understood! (although I had a feeling there was often something interesting in it)). in Python it is a convention only to capitalize classes, so unless Entry and PatchesDir are classes it would be better to write them as entry and patches_dir for example. Why use (open, gzp.GzipFile)[Entry.endswith(".gz")] when we have had contitional expressions for a few years now? Instead, you can write (gzip.GzipFile if entry.endswidth(".gz") else open). I think it will be faster (as it doesn't require the construction of a tuple and then the retrieval of one of its elements) and clearer. It's good to be able to understand (and I guess, to write) such code. But to assume that others dislike it because they don't understand it sends several wrong signals: * you give the impression of being arrogant; * many people will understand this code snippet perfectly easily but they won't like it because they think that Python offers much better ways to express the same thing. * you seem to disregard the fact that in 'programming language' there is the word 'language'. A language is a way to _communicate_ information, in the case of a programming language you communicate it to the computer but also to other human beings. To come back to your code, you could define a function like the one below (untested). It'll allow you to add support for different compression formats easily in the future. This is a 'pattern' which can be useful to keep in mind and requires *some* imagination. open_methods = { 'gz': gzip.GzipFile, 'bz2': bz2.BZ2File } def open_by_ext(path, *args): ext = os.path.splitext(path)[1] return open_methods.get(ext, open)(path, *args) Then your code snippet becomes: open_by_ext(os.path.join(patches_dir, entry), "r") -- Arnaud -- http://mail.python.org/mailman/listinfo/python-list