[Python] Why the performance difference between `|` and `or` different for different values?

Discussão em 'Python' iniciado por Stack, Agosto 16, 2025.

  1. Stack

    Stack Membro Participativo

    I was timing performance for operators, I found this:

    >>> timeit.timeit("10000000<2 or 10000000>1000",number=10000000)
    0.4213107880004827
    >>> timeit.timeit("(10000000<2) | (10000000>1000)",number=10000000)
    0.5472174039969104

    >>> timeit.timeit("1000<200000 or 100>1000",number=10000000)
    0.26014828799998213
    >>> timeit.timeit("(1000<200000) | (100>1000)",number=10000000)
    0.49938497000039206


    Although the difference is sometimes miniscule, or consistently beats | for these large number comparisons (I am not really sure if this is because of the large numbers or not).

    But then:

    >>> timeit.timeit("0 or 1",number=10000000)
    Out[134]: 0.17863203100023384
    >>> timeit.timeit("0 | 1",number=10000000)
    Out[135]: 0.06668136799999047

    >>> timeit.timeit("00000 | 111111",number=10000000)
    Out[136]: 0.06739834499967401
    >>> timeit.timeit("00000 or 111111",number=10000000)
    Out[137]: 0.1818816989998595

    >>> timeit.timeit("True or False",number=10000000)
    Out[138]: 0.12497510200046236
    >>> timeit.timeit("True | False",number=10000000)
    Out[139]: 0.06938139100020635

    >>> timeit.timeit("False | True",number=10000000)
    Out[140]: 0.0667262490005669
    >>> timeit.timeit("False or True",number=10000000)
    Out[141]: 0.1443343150003784


    What's happening? Is this expected? I believed that | always checks both operands even if the first one evaluates to True. So at least for cases where 1st operand is True, shouldn't or be consistently faster?

    Continue reading...

Compartilhe esta Página