On Tue, Apr 21, 2020 at 5:41 PM M.-A. Lemburg <[email protected]> wrote:
>
> On 21.04.2020 06:56, Chris Angelico wrote:
> > On Tue, Apr 21, 2020 at 9:27 AM M.-A. Lemburg <[email protected]> wrote:
> >> But arguing that f(a=, b=, c=, d=) is any better than
> >> f(a=a, b=b, c=c, d=d) does not really solve anything.
> >>
> >> The problem is with the code design, not with the syntax.
> >>
> >> You'd be better off putting your variables combined into a context
> >> object or container and pass that around:
> >>
> >> f(context)
> >>
> >> In many cases, you can avoid passing around any of these
> >> variables, by simply using an object rather than a function oriented
> >> approach. The variables would then become object attributes,
> >> so calling f() becomes:
> >>
> >> task.f()
> >>
> >> and the method f would get it's context straight from the
> >> object attributes of task -- without any arguments to pass in.
> >
> > Please explain how this will help the case of render_template and
> > similar, where the function accepts ANY keyword arguments, and then
> > passes them along to the template. Do I need to package everything up
> > into a dictionary? And how would that actually improve things, given
> > that I'd still need to do the exact same thing to construct that
> > dictionary? Every template has its own unique variables, and most of
> > them come straight from the calling function, with the same names.
> >
> > This is NOT going to be a consistent object with the same attributes.
> > That simply is not the use-case here. We already have that.
>
> A render_template() function which has **kws as parameter can
> take any number of keyword parameters, including ones which are
> not used in the template.
>
> Those functions will usually take a namespace object as basis for
> rendering the final string.
>
> In the use case discussed here, that namespace would be
> locals(), so you could just as well write render_template(**locals()),
> or better: use a namespace object, fill this with the right
> values and pass in render_template(namespace).
>

I don't want to give it all my locals; I want to give it a specific
subset of them, and a few others that aren't actually in variables.

You've seen the code earlier in this thread. Show me how your proposal
would improve it.

ChrisA
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/[email protected]/message/X2KS5WTHDTHOZIOTTJ4GE43CZM5PUGBC/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to