> > I disagree. Those are examples of people being used to *positional > arguments* and this expecting that order to carry over. I don’t think > that’s a good argument because it presupposes that a habit of positional > arguments is good. >
If 99% of existing code uses: pd.read_csv(fname, parse_dates=True, day_first=True) In preference to: pd.read_csv(fname, day_first=True, parse_dates=True) It seems pretty absurd to say that readability isn't harmed by someone choosing the "non-standard" order. Of course it still works the same for the library; but it's not the same for humans reading the code. There is one thing: my proposal wouldn’t result in a NameError at the > eval() call. You tried it out in a console but didn’t think about the > scoping properly. For your suggestion to work you have to copy paste that > helper function into the code at all scopes you want to use it. > This is just wrong. Assuming there is no 'd' available in the current scope, what could this POSSIBLY do other than raise a NameError: function(a=77, *, b, d) My little utility function decided to convert the NameError into a None value for the missing variable; but I mentioned that I'm not sure whether that's more useful behavior, and I'm not much attached to one or the other. function(a=77, **use('b d')) To make that helper function work you need to grab the stack frame and > extract the variables from there. You could absolutely do that though. > That’s pretty evil though. > Nope, there's absolutely no need to poke into the stack frame. It's just a regular closure over any variables that might exist in surrounding scopes. *Exactly* the same thing that your proposal would have to do. It makes absolutely no difference how deeply or shallowly nested the call to `use()` might be... A name like `d` simply is or is not available. Since the utility function doesn't have its own locals or formal parameters, nothing is changed by being one level deeper.[*] [*] Actually, that's not true. My implementation potentially steps on the three names `names`, `name` and `kws`. Perhaps those should be called `__names`, `__name`, and `__kws` to avoid that issue. If so, that's an easy change. -- Keeping medicines from the bloodstreams of the sick; food from the bellies of the hungry; books from the hands of the uneducated; technology from the underdeveloped; and putting advocates of freedom in prisons. Intellectual property is to the 21st century what the slave trade was to the 16th.
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/