On Fri, Dec 29, 2017 at 10:26:22PM +1100, Chris Angelico wrote: > On Fri, Dec 29, 2017 at 7:18 PM, Steven D'Aprano <st...@pearwood.info> wrote: > > Since ints don't provide a set-like interface, they aren't strictly > > speaking bitsets. But in any case, nobody is stopping people from using > > sets of enum values. > > I'm not sure what "set-like interface" you'd be looking for, but the > built-in set type has a lot of the same operations as an integer does, > and the semantics are virtually identical to a set of bits. The only > one you really lack is __contains__, which could easily be added:
The lack of support for the `in` operator is a major difference, but there's also `len` (equivalent to "count the one bits"), superset and subset testing, various in-place mutator methods, etc. Java has a BitSet class, and you can see the typical sorts of operations commonly required: https://docs.oracle.com/javase/8/docs/api/java/util/BitSet.html Of course we can emulate set-like operations using ints, but the interfaces are different, which is my point. Here's how to clear all the flags of a set or int: the_flags.clear() the_flags = 0 # clear all the bits in an int Setting a flag is *almost* the same between the two: the_flags |= {flag} # set the_flags |= flag # int although for sets, there are two other ways to set a flag which aren't supported by ints: the_flags.add(flag) the_flags.update({flag}) Similarly for clearing flags: the_flags.discard(flag) the_flags & ~flag -- Steve _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/