On May 4, 1:47 pm, Steven D'Aprano <steve +comp.lang.pyt...@pearwood.info> wrote: > I too am uncomfortable about passing locals() to a function, but not > because of imaginary "name clashes". The problem as I see it is that this > will give the function access to things the function has no need for.
And I would never use it in the real world. If anything, I'd rebind via the function parameters: def f(arg,fn1=None,fn2=None): pass f('arg', **locals()) This way, only the aspects of the local scope that the function explicitly asks for are provided. But: I would _only_ do this in a context I controlled. However, that would be the _same_ context in which the code blocks example would also be used. I think. I'm still waiting to see an example that is clear. I've never _ever_ found myself thinking "this code would be a LOT clearer if I didn't have to give it a name..." > Another problem is that even in implementations where you can't rebind > locals, the called function might mutate them instead. If any of the > content of locals() are mutable, you're giving the function the potential > to mutate them, whether it needs that power or not. This is true. But that would be the case with a provided dict too. I wasn't suggesting someone blindly throw locals into every function and hope for the best. I was merely stating that if you know that your function is only going to use certain values, it doesn't matter how many values you pass it, if it chooses to ignore them. > My argument is that this is equivalent to passing locals() as argument. > Your local scope contains some arbitrary number of name bindings. Only > some of them are actually used. Why pass all (say) 25 of them if the > function only needs access to (say) three? Flip it: I've set up a local scope that _only_ contains the functions I need. Why manually create a dict, repeating the name of each function as a key, when I can just use locals()? > To me, passing locals() as an > argument in this fashion is a code-smell: not necessary wrong or bad, but > a hint that something unusual and slightly worrying is going on, and you > should take a close look at it because there *may* be a problem. Or, conversely, I _know_ what I'm doing in the context of my own code and it's the most elegant way to write it. Frankly, I don't really care; I'm sick of this whole thread. We're all taking bullshit abstractions & toy examples and none of it is indicative of how anyone would really write code. > > So far, pretty much everyone who has tried to engage you on this subject > > on the list. I'm sorry we're not all ZOMGRUBYBLOCKS!!!!111 like the > > commenters on your project page. > > Goddamit, did I miss a post somewhere? What the hell is this project > people keep talking about? https://bitbucket.org/mtomassoli/codeblocks/ The examples here are a wonder to behold as well: http://mtomassoli.wordpress.com/2012/04/20/code-blocks-in-python/ -- http://mail.python.org/mailman/listinfo/python-list