
Gerald Britton <gerald.britton@gmail.com> writes:
Anyway, I like the "where" idea not because of real or imagined performance gains, but because of its cleanness when expressing problems.
(Speaking of cwclean expression, please don't top-post; instead, remove irrelevant quoted material and respond beneath each remaining point <URL:http://en.wikipedia.org/wiki/Posting_style#Inline_replying>.)
A big use for me would be in list comprehensions. In one project I work on, I see things like:
for i in [item in self.someobject.get_generator() if self.important_test(item)]
and other really long object references.
which I would like to write:
mylist = [item in f if g(item)] where: f = self.someobject.get_generator() g = self.important_test
I presume these two are supposed to be equivalent (and syntactically valid), so I'll take it the first one should be something like:: mylist = [item for item in self.someobject.get_generator() if self.important_test(item)]
To my eyes, the first is harder to read than the second one.
That's largely attributable to the fact that you've got one alternative all on a single line, and the other broken into more easily-readable lines. I don't think the ‘where’ syntax is much help there. I would write the single-statement version as:: mylist = [ item for item in self.someobject.get_generator() if self.important_test(item)] which makes it far more readable. I argue that this does away with pretty much any justification for your use case above. -- \ “… a Microsoft Certified System Engineer is to information | `\ technology as a McDonalds Certified Food Specialist is to the | _o__) culinary arts.” —Michael Bacarella | Ben Finney