В чем разница между встроенной в Python функцией `pow` и оператором` ** `? - PullRequest
0 голосов
/ 07 марта 2020

Почему функция pow существует, если есть оператор **? Это даже быстрее, чем функция:

from timeit import timeit
print(timeit('pow(3000, 3000)', number=10000))
print(timeit('3000**3000', number=10000))

Вывод:

1.3396891819999155
1.3082993840000654

1 Ответ

1 голос
/ 07 марта 2020

Я нашел одно использование для функции pow через оператор **. Во-первых, ** - это действительно повышение до степени и применение дополнительного модуля , как в a**b % c. Но если вы включите %, его значение не может быть None. 2**3 % None это ошибка. pow действительно pow(x, y, z=None).

Итак, если я хочу повысить производное значение до степени, я мог бы использовать оператор

>>> def powerizer(db, index, modulus=None):
...     x, y = db.get(index)
...     return x**y % modulus
... 
>>> db = {"foo":[9,3]}
>>> powerizer(db, "foo", 10)
9

Но он не работает по умолчанию None модуль.

>>> powerizer(db, "foo")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in powerizer
TypeError: unsupported operand type(s) for %: 'int' and 'NoneType'

pow функция спасения

>>> def powerizer(db, index, modulus=None):
...     x, y = db.get(index)
...     return pow(x, y, modulus)
... 
>>> powerizer(db, "foo", 10)
9
>>> powerizer(db, "foo")
729
...