On Fri, Apr 17, 2020 at 6:09 PM David Mertz <mertz@gnosis.cx> wrote:
On Fri, Apr 17, 2020 at 9:57 AM <oliveira.rodrigo.m@gmail.com> wrote:
The mode-switch proposal though would not impede one to mix shorthand and longhand forms. This should be valid syntax:

```python
return render_template("index.html", *,
    twitter, username=user["display_name"],
    channel, channelid, error,
    setups=database.list_setups(channelid),
    sched_tz, schedule, sched_tweet,
    checklist=database.get_checklist(channelid),
    timers=database.list_timers(channelid),
    tweets,
)
```

I definitely hate the above version.  Intermixing auto-named values with bound values is super-confusing and a huge bug magnet.

How is it confusing? How is it a bug magnet?

I do think that example looks like a mess, but if each parameter is on its own line, I think it looks fine:

```
render_template(
    "index.html",
    *,
    twitter,
    username=user["display_name"],
    channel,
    channelid,
    error,
    setups=database.list_setups(channelid),
    sched_tz,
    schedule,
    sched_tweet,
    checklist=database.get_checklist(channelid),
    timers=database.list_timers(channelid),
    tweets,
)
```
 
However, the following does not look bad ONLY if the mode-switch is strictly to bare-names-only after the switch:

render_template("index.html",
    username=user["display_name"],
    setups=database.list_setups(channelid),
    checklist=database.get_checklist(channelid),
    timers=database.list_timers(channelid),
    **,
    twitter,
    channel,
    channelid,
    error,
   
sched_tz,
    schedule,
    sched_tweet,
    tweets,
    **more_kwargs)

Putting the named parameters strictly first gives a hint to the fact that the rest are "special named parameters" (with auto-naming).

Why does that need emphasising? Are you thinking like Ricky and Steven D'Aprano that people might sometimes think that they're looking at positional arguments and get confused?