Podczas przechowywania bool w memcached poprzez python-memcached zauważyłem, że jest on zwracany jako liczba całkowita. Sprawdzenie kodu biblioteki pokazało mi, że jest miejsce, w którym isinstance(val, int)
zaznaczone jest oflagowanie wartości jako liczby całkowitej.
Przetestowałem to w powłoce Pythona i zauważyłem, co następuje:
>>> isinstance(True, int)
True
>>> issubclass(bool, int)
True
Ale dlaczego dokładnie jest bool
podklasa int
?
Ma to sens, ponieważ w zasadzie wartość logiczna jest wartością typu int, która może przyjmować tylko dwie wartości, ale wymaga znacznie mniej operacji / miejsca niż rzeczywista liczba całkowita (bez arytmetyki, tylko jeden bit miejsca w pamięci) ....
bool
zmniejszanie rozmiaru. Jeśli dbałeś o wykorzystanie pamięci, na początku używałbyś innego języka.Odpowiedzi:
Z komentarza na http://www.peterbe.com/plog/bool-is-int
To miłe wyjaśnienie należy do dman13.
źródło
sum([f(value) for value in values])
którychf(x)
znajduje się jakiś rodzaj funkcji filtrującej i musisz zobaczyć, ile wartości przechodzi przez filtr.sum(1 for value in values if f(value))
, ale tak naprawdę widziałem szanowanych ludzi opowiadających się za operacjami numerycznymi na boolach.Zobacz PEP 285 - Dodawanie typu bool . Odpowiedni fragment:
źródło
Można również użyć
help
do sprawdzeniaBool
wartości w konsoli:help (prawda)
help(True) Help on bool object: class bool(int) | bool(x) -> bool | | Returns True when the argument x is true, False otherwise. | The builtins True and False are the only two instances of the class bool. | The class bool is a subclass of the class int, and cannot be subclassed. | | Method resolution order: | bool | int | object |
pomoc (fałsz)
help(False) Help on bool object: class bool(int) | bool(x) -> bool | | Returns True when the argument x is true, False otherwise. | The builtins True and False are the only two instances of the class bool. | The class bool is a subclass of the class int, and cannot be subclassed. | | Method resolution order: | bool | int | object
źródło