Базовые математические операторы

Введение

Python имеет общие математические операции в своем распоряжении, включая целочисленное деление, деление с плавающей точкой, умножение, возведение в степень, сложение и вычитание. Математический модуль (включен во все стандартные версии Python) предлагает расширенную функциональность как тригонометрические функции, извлечение корня, логарифмы и многое другое.

Сложение в Python

a, b = 1, 2

# Используется "+" оператор:
a + b                  # = 3

# Используется "+=" оператор для сложения и назначения:
a += b                 # a = 3 (эквивалентно a = a + b)

import operator        # поддерживает 2 аргумента арифметических функций для примеров
operator.add(a, b)     # = 5  since a is set to 3 right before this line

# Оператор "+=" эквивалентен: 
a = operator.iadd(a, b)    # a = 5 since a is set to 3 right before this line

Возможные комбинации (встроенные типы):

  • int и int (дает int )
  • int и float (дает float )
  • int и complex (дает complex )
  • float и float (дает float )
  • float и complex (дает complex )
  • complex и complex (дает complex )

Примечание: + оператор также используется для конкатенации строк, списков и кортежей:

"first string " + "second string"

>>>Out: 'first string second string'

[1, 2, 3] + [4, 5, 6]                # = [1, 2, 3, 4, 5, 6]

>>>Out: [1, 2, 3, 4, 5, 6]

Вычитание в python

a, b = 1, 2

# для вычитания используется "-" оператор:
b - a

>>>Out: 1


import operator        # поддерживает 2 аргумента арифметических функций
operator.sub(b, a)

>>>Out: 1
 

Возможные комбинации (встроенные типы):

  • int и int (дает int )
  • int и float (дает float )
  • int и complex (дает complex )
  • float и float (дает float )
  • float и complex (дает complex )
  • complex и complex (дает complex )

умножение в python

 a, b = 2, 3

a * b                  

>>>Out: 6

import operator
operator.mul(a, b)     

>>>Out: 6

Возможные комбинации (встроенные типы):

  • int и int (дает int )
  • int и float (дает float )
  • int и complex (дает complex )
  • float и float (дает float )
  • float и complex (дает complex )
  • complex и complex (дает complex )

Примечание: * оператор также используется для повторной конкатенации строк, списков и кортежей:

 3 * 'ab'  # = 'ababab'
3 *('a', 'b')  # =('a', 'b', 'a', 'b', 'a', 'b') 

Деление

Python выполняет целочисленное деление, когда оба операнда являются целыми числами. Поведение операторов деления Python изменились с 2.x и 3.x Python.

 a, b, c, d, e = 3, 2, 2.0, -3, 10

 

В Python 2 результат оператора / зависит от типа числителя и знаменателя. a / b # = 1
a / c # = 1,5
d / b # = -2
b / a # = 0
d / e # = -1

Обратите внимание, что поскольку a и b являются int, то результат является int. Результат всегда округляется до нуля. Поскольку c является float, результатом a / c является float. Вы также можете использовать модуль оператора: оператор #. Модуль оператора предоставляет арифметические функции с двумя аргументами operator.div (a, b) # = 1 оператор .__ div __ (a, b) # = 1

Что делать, если вы хотите разделить поплавки:

Рекомендуемые:

 from __future__ import division # applies Python 3 style division to the entire module
a / b                  # = 1.5 
a // b                 # = 1

 

Хорошо (если вы не хотите применять ко всему модулю):

 a / (b * 1.0)          # = 1.5
1.0 * a / b            # = 1.5
a / b * 1.0            # = 1.0    (careful with order of operations)

from operator import truediv
truediv(a, b)          # = 1.5

 

Не рекомендуется (может вызывать TypeError, например, если аргумент сложный):

 float(a) / b           # = 1.5
a / float(b)           # = 1.5


 

Оператор «//» в Python 2 вызывает разделение по этажам независимо от типа. a // b # = 1 a // c # = 1.0

В Python 3, / оператор выполняет «истинные» разделения независимо от типа. // оператор выполняет вольные деление и поддерживает тип.

 a / b                  # = 1.5 
e / b                  # = 5.0
a // b                 # = 1
a // c                 # = 1.0

import operator            # the operator module provides 2-argument arithmetic functions
operator.truediv(a, b)     # = 1.5
operator.floordiv(a, b)    # = 1
operator.floordiv(a, c)    # = 1.0

 

Возможные комбинации (встроенные типы):

  • int и int (дает int в Python 2 и float в Python 3)
  • int и float (дает float )
  • int и complex (дает complex )
  • float и float (дает float )
  • float и complex (дает complex )
  • complex и complex (дает complex )

См PEP 238 для получения дополнительной информации.

возведения

 a, b = 2, 3

(a ** b)               # = 8
pow(a, b)              # = 8

import math
math.pow(a, b)         # = 8.0 (always float; does not allow complex results)

import operator
operator.pow(a, b)     # = 8

 

Еще одно различия между встроенным pow и math.pow является то , что встроенный pow может принимать три аргумента:

 a, b, c = 2, 3, 2

pow(2, 3, 2)           # 0, calculates (2 ** 3) % 2, but as per Python docs,
                       #    does so more efficiently

 

Специальные функции

Функция math.sqrt(x) вычисляет квадратный корень из x .

 import math
import cmath
c = 4
math.sqrt(c)           # = 2.0 (always float; does not allow complex results)
cmath.sqrt(c)          # = (2+0j) (always complex)

 

Чтобы вычислить другие корни, такие как кубический корень, увеличьте число до величины, обратной степени корня. Это может быть сделано с любой из показательных функций или оператора.

  import math
 x = 8
 math.pow(x, 1/3) # evaluates to 2.0
 x**(1/3) # evaluates to 2.0

 

Функция math.exp(x) вычисляет e ** x .

 math.exp(0)  # 1.0
math.exp(1)  # 2.718281828459045 (e)

 

Функция math.expm1(x) вычисляет e ** x - 1.Когда x мала, то это дает значительно лучшую точность , чем math.exp(x) - 1 .

 math.expm1(0)       # 0.0

math.exp(1e-6) - 1  # 1.0000004999621837e-06
math.expm1(1e-6)    # 1.0000005000001665e-06
# exact result      # 1.000000500000166666708333341666... 

Логарифмы

По умолчанию math.log функция вычисляет логарифм числа, по основанию е. Вы можете при желании указать базу в качестве второго аргумента.

 import math
import cmath

math.log(5)         # = 1.6094379124341003
# optional base argument. Default is math.e
math.log(5, math.e) # = 1.6094379124341003
cmath.log(5)        # = (1.6094379124341003+0j)
math.log(1000, 10)   # 3.0 (always returns float)
cmath.log(1000, 10)  # (3+0j)

 

Специальные вариации math.log функции существуют для различных оснований.

 # Logarithm base e - 1 (higher precision for low values)
math.log1p(5)       # = 1.791759469228055

# Logarithm base 2
math.log2(8)        # = 3.0

# Logarithm base 10
math.log10(100)     # = 2.0
cmath.log10(100)    # = (2+0j) 

Операции на месте

В приложениях обычно требуется такой код:

 a = a + 1

 

или же

 a = a * 2

 

Для этих операций на месте есть эффективный ярлык:

 a += 1
# and
a *= 2

 

Любой математический оператор может использоваться перед символом '='для выполнения операции на месте:

  • -= декремент переменной в месте
  • += Приращение переменной в месте
  • *= Умножить переменную на месте
  • /= Разделить переменную на месте
  • //= пол разделить переменную на месте # Python 3
  • %= Возвращают модуль переменной вместо
  • **= поднять на мощность в месте

Другие в месте операторов существуют для поразрядных операторов ( ^ , | и т.д.)

Тригонометрические функции

 a, b = 1, 2

import math

math.sin(a)  # returns the sine of 'a' in radians
# Out: 0.8414709848078965

math.cosh(b)  # returns the inverse hyperbolic cosine of 'b' in radians
# Out: 3.7621956910836314

math.atan(math.pi)  # returns the arc tangent of 'pi' in radians
# Out: 1.2626272556789115

math.hypot(a, b) # returns the Euclidean norm, same as math.sqrt(a*a + b*b)
# Out: 2.23606797749979

 

Обратите внимание , что math.hypot(x, y) также длина вектора (или евклидово расстояние) от начала координат (0, 0) до точки (x, y) .

Для вычисления евклидова расстояния между двумя точками (x1, y1) и (x2, y2) можно использовать math.hypot следующих

 math.hypot(x2-x1, y2-y1) 

Для преобразования из радиана -> степеней и степеней -> радиан соответственно использовать math.degrees и math.radians

 math.degrees(a)
# Out: 57.29577951308232

math.radians(57.29577951308232)
# Out: 1.0 

модуль

Как и во многих других языках, Python использует % оператор для вычисления модуля.

 3 % 4     # 3
10 % 2    # 0
6 % 4     # 2

 

Или с помощью operator модуля:

 import operator

operator.mod(3 , 4)     # 3
operator.mod(10 , 2)    # 0
operator.mod(6 , 4)     # 2

 

Вы также можете использовать отрицательные числа.

 -9 % 7     # 5
9 % -7     # -5
-9 % -7    # -2

 

Если вам необходимо найти результат целочисленного деления и модуля, вы можете использовать divmod функцию в качестве ярлыка:

quotient, remainder = divmod(9, 4)
# quotient = 2, remainder = 1 as 4 * 2 + 1 == 9

Синтаксис

Параметры

Примечания