Created
March 10, 2015 23:06
-
-
Save alexandre/874cdfd609d9aee2bc3d to your computer and use it in GitHub Desktop.
boolean or range?
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| >>> import dis | |
| >>> | |
| >>> def foo_with_bool(foo): return foo < 1 or foo > 12 | |
| ... | |
| >>> def foo_with_range(foo): return foo in range(1,13) | |
| ... | |
| >>> dis.dis(foo_with_bool) | |
| 1 0 LOAD_FAST 0 (foo) | |
| 3 LOAD_CONST 1 (1) | |
| 6 COMPARE_OP 0 (<) | |
| 9 JUMP_IF_TRUE_OR_POP 21 | |
| 12 LOAD_FAST 0 (foo) | |
| 15 LOAD_CONST 2 (12) | |
| 18 COMPARE_OP 4 (>) | |
| >> 21 RETURN_VALUE | |
| >>> dis.dis(foo_with_range) | |
| 1 0 LOAD_FAST 0 (foo) | |
| 3 LOAD_GLOBAL 0 (range) | |
| 6 LOAD_CONST 1 (1) | |
| 9 LOAD_CONST 2 (13) | |
| 12 CALL_FUNCTION 2 (2 positional, 0 keyword pair) | |
| 15 COMPARE_OP 6 (in) | |
| 18 RETURN_VALUE | |
| >>> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Maneiro o exercício.
Experimentando com o seu código observei que o bool é mais rápido como esperado. Mais ainda quando ocorre curto circuito que economiza a validação da expressão à direita do
or.O
rangeé bem mais caro:Mas então fiz um ajuste no seu código para reproduzir true quando o valor for dentro do intervalo, simulando a lógica do
in:Então troquei o
rangepelatuplae oinficou bem rápido no melhor caso. Mais rápido até que a comparação:No
disdá pra ver que atuplaliteral vira umLOAD_CONST: