On Apr 29, 2020, at 22:50, Stephen J. Turnbull
<[email protected]> wrote:
> Andrew Barnert via Python-ideas writes:
>
>>> Also -1 on the flag.
>
> Also -1 on the flag, for the same set of reasons.
>
> I have to dissent somewhat from one of the complaints, though:
>
>> auto-complete won’t help at all,
Thanks for pointing this out; I didn’t realize how misleadingly I stated this.
What I meant to say is that auto-complete won’t help at all with the problem
that flags are less discoverable and harder to type than separate functions.
Not that it won’t help at all with typing flags—it will actually help a little,
it’ll just help a lot less than with separate functions, making the problem
even starker rather than eliminating it.
It’s worth trying this out to see for yourself.
> Many (most?) people use IDEs that will catch up more or less quickly,
> though.
In fact, most IDEs should just automatically work without needing to change
anything, because they work off the signatures and/or typesheds in the first
place. That’s not the issue; the issue is what they can actually do for you.
And it’s not really any different from in your terminal.
In an iPython REPL in my terminal, I enter these definitions:
def spam(*args, equal=False): pass
def eggs(*args): pass
def eggs_equal(*args): pass
I can now type eggs_equal(x, y) with `e TAB TAB x, y` or `eggs_ TAB x, y`. And
either way, a pop up is showing me exactly the options I want to see when I ask
for completion, I’m not just typing that blind.
I can type spam(x, y, equal=True) with `s TAB x, y, e TAB T TAB`. That is
better than typing out the whole thing, but notice that it requires three
autocompletes rather than one, and they aren’t nearly as helpful. Why? Well, it
has no idea that the third argument I want to pass is the equal keyword rather
than anything at all, because *args takes anything all. And, even after it
knows I’m passing the equal argument, it has no idea what value I want for it,
so the only way to get suggestions for what to pass as the value is to type T
and complete all values in scope starting with T (and usually True will be the
first one). And it’s not giving me much useful information at each step; I had
to know that I was looking to type equal=True before it could help me type
that. The popup signature that shows *args, equal=False does clue me in, but
still not nearly as well as offering eggs_equal did.
Now repeat the same thing in a source file in PyCharm, and it’s basically the
same. Sure, the popups are nicer, and PyCharm actually infers that equal is of
type bool even though I didn’t annotate so it can show me True, False, and all
bool variables in scope instead of showing me everything in scope, but
otherwise, no difference. I still need to ask for help three times instead of
once, and get less guidance when I do.
And that’s with a bool (or Enum) flag. Change it to end="shortest", and it’s
even worse. Strings aren’t code, they’re data, so PyCharm suggests nothing at
all for the argument value, while iPython suggests generally-interesting
strings like the files in my cwd. (I suppose they could add a special case for
this argument of this function, although they don’t do that for anything else,
not even the mode argument of open—and, even if they did, at best that makes
things only a little worse than a bool or Enum instead of a lot worse…)
_______________________________________________
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/ERRWSIQC5XQBMOY3WX2NR5HH426LYX5L/
Code of Conduct: http://python.org/psf/codeofconduct/