Вопрос

just a simple question.

Some python functions I have seen are called like this, for example pygame:

pygame.display.set_mode((255, 255), FULLSCREEN) This seems normal to me.

But when you want to use more than one argument, you must use |. For example: pygame.display.set_mode((255, 255), FULLSCREEN | HWSURFACE | DOUBLEBUF)

When and why would you want this kind of calling? I have heard it is the bitwise OR operator, but it seems that is only for boolean values. How does this work?

Это было полезно?

Решение

They're flags for different options. Each flag is just a number, specifically a power of 2. You use the bitwise operator | to flip the bits for all the flags you want. An example might help:

>>> import re
>>> re.VERBOSE
64
>>> re.IGNORECASE
2
>>> re.VERBOSE | re.IGNORECASE
66

so if re wants to know whether the IGNORECASE flag is set it can just check whether the second bit(for 2^1) is equal to 1. If so, we should ignore case. And if it wants to know whether to be VERBOSE, it checks the 7th bit(for 2^6). By oring 2 and 64 together, you have a number with the second and seventh bits flipped.

>>> 66 & 2
2
>>> 66 & 64
64
>>> 66 & 8
0

We can see that 66 triggers flags for 2 and 64, but not 8.

Другие советы

Beware the difference between bitwise OR operator with the boolean OR operator:

| is the bitwise OR operator, that is, the OR operation is made bit per bit of the operands:

>>> 1 | 2
3

That's because 1 binary is 001, 2 binary is 010, so the OR bit per bit of them is 011, that is, 3.

or is the boolean operator.

>>> 1 or 2
1
>>> 0 or 2
2

The or operator returns the first valid value (not 0, None, [] or {})

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top