Hi Steve, I did not write an attack on the "Python devs". Re-read my original with a little less hostility and there should be room for an interpretation, (which I meant), that does not warrant such a hostile reply.

The original is written in the hope of furthering discussion on the need for what is deemed pythonic , and on what Python is taught , as the language itself changes.
We now have enums if you want to pass a set of flags to a function then you could have them as separate arguments - but that leads to long and cumbersome parameter lists; you could, and many do, have flags that are individual powers of two and then or them together and pass the result - creating a bitset; but we can now have the flags as separate enum.Enums and pass a set of values to a function as the flag set. 

This new way means that people being taught the method can use a knowledge of sets and enums - no need to know about powers of two,, what happens when they are bit-or'd together; and bitsets. We have gone to a higher level description of what we are doing; no need to mired in the details of the how of what one wants to achieve. bitsets can be taught as an optimisation.

As for re, and otheralready written libraries, their is no need to change them, but other Pythoneers might well opt to not use bitsets, but rather sets of enum values.


On Wednesday, 27 December 2017 05:58:00 UTC, Steven D'Aprano wrote:
On Tue, Dec 26, 2017 at 12:07:52PM -0800, Paddy3118 wrote:

> Maybe it is time to deemphasize the creation and passing of what is, in
> effect, bit-sets <https://en.wikipedia.org/wiki/Bit_array>as a single
> argument, and instead promote the passing of a set of members of an
> enum.Enum <https://docs.python.org/3/library/enum.html> constants.

That implies that we are promoting bit sets (not merely using them).
Where are we doing that?


> Thi comes about because someone wrote a description, (since deleted),

"Someone"? One of the Python core developers?

If not, well, the Python devs cannot be held responsible for what random
people on the internet write.


> of
> constructing bit-sets to use in passing flags to, for example, the
> re.compile <https://docs.python.org/3/library/re.html#re.compile>function.
> The use of individual bits in a bit-array/bit-set to pass multiple flags is
> an implementation detail.

It certainly is not an implementation detail -- it is a part of the
public, published interface to the re module.

Of course had history been different, re.compile *could* have taken a
set of Enums instead. But that doesn't make it an implementation detail.
That would be like saying that:

   re.search(pattern, text, flags=0)

is an implementation detail, and we should feel free to change it to

   re.examine(text, pattern, set_of_enums=frozenset())

We can't change a public interface documented as taking an integer to
one taking a set of Enums without going through a deprecation period.

However, we could *add* an additional interface, where the re functions
that currently accept an integer flag *also* accepts a set of Enums.


> Should we not *first *teach the passing of a set
> of enum.Enum constant values in one argument as the *pythonic *way;

What makes you say that is the Pythonic way? (That's not a rhetorical
question.)


--
Steve
_______________________________________________
Python-ideas mailing list
Python...@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/