
Nick Coghlan wrote:
On Sun, Oct 16, 2011 at 9:01 PM, Steven D'Aprano <steve@pearwood.info> wrote:
If it's not tested, how do you know it does what you need?
Because my script does what I want. Not every Python script is a production application. We lose sight of that point at our peril.
Systems administrators, lawyers, financial analysts, mathematicians, scientists... they're not writing continuously integrated production code, they're not writing reusable modules, they're writing scripts to *get things done*.
"And it doesn't matter whether it's done correctly, so long as SOMETHING gets done!!!" <wink> I'm not convinced that requiring coders to write: given a, b c do f(a, b, c) instead of do f(a, b, c) given a, b, c gets in the way of getting things done. I argue that the second form encourages bad practices and we shouldn't add more features to Python that encourage such bad practices. I certainly don't think that people should be forced to test their code if they don't want to, and even if I did, it wouldn't be practical. [...]
All that said... is your objection *only* to the "statement local" part of the proposal? That part is actually less interesting to me than the out of order execution part. However, our past experience with list comprehensions suggests that exposing the names bound inside the suite in the containing scope would be confusing in its own way.
No. Introducing a new scope is fine. Namespaces are cool, and we should have more of them. It's the out of order part that I dislike. Consider this: a = 1 b = 2 c = 3 result = some_function(a, b, c) given: d = "this isn't actually used" a = c b = 42 I see the call to some_function, I *think* I know what arguments it takes, because a b c are already defined, right? But then I see a "given" statement and the start of a new scope, and I have that moment of existential dread where I'm no longer sure of *anything*, any of a b c AND some_function could be replaced, and I won't know which until after reading the entire given block. At which point I can mentally back-track and finally understand the "result =" line. If a, b aren't previously defined, then I have a mental page fault earlier: "what the hell are a and b, oh wait, here comes a given statement, *perhaps* they're defined inside it...". Either way, out of order execution hurts readability. There's a reason that even mathematicians usually define terms before using them. But for what it's worth, if we end up with this feature, I agree that it should introduce a new scope, and the "given" syntax is the nicest I've yet seen. -- Steven