Let's use a concrete example: `re.RegexFlag`
```
Help on function match in module re:
match(pattern, string, flags=0)
Try to apply the pattern at the start of the string, returning
a Match object, or None if no match was found.
```
In use we have:
result = re.match('present', 'who has a presence here?',
re.IGNORECASE|re.DOTALL)
Inside `re.match` we have `flags`, but we don't know if `flags` is nothing (0), a single flag (re.ASCII, maybe) or a
group of flags (such as in the example). For me, the obvious way to check is with:
if re.IGNORECASE in flags: # could be re.I in 0, re.I in 2, re.I in 5, etc.
...
Now, suppose for the sake of argument that there was a combination of flags
that had its own code path, say
weird_case = re.ASCII | re.LOCALE | re.MULTILINE
I can see that going two ways:
weird_case in flags # if other flags allowed
or
weird_case is flags # if no other flags allowed
The idiom that I'm shooting for is using `in` to check for flags:
- flag1 in flag1 True
- flag1 in (flag1 | flag2) True
- flag3 in (flag1 | flag2) True
- flag3 in flag1 False
- flag3 in flag4 False
and
- flag0 in any flag False
- any flag in flag0 False
And, of course, if we want to know if the thing we have is exactly flag1:
flag is flag1
will tell us.
Does this make sense?
--
~Ethan~
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at
https://mail.python.org/archives/list/python-dev@python.org/message/7P552C66N6S3OBLH4UPWINU7TVPFT2Y3/
Code of Conduct: http://python.org/psf/codeofconduct/