Python Language
Eenvoudige wiskundige operatoren
Zoeken…
Invoering
Opmerkingen
Numerieke typen en hun metaclasses
De numbers bevat de abstracte metaclasses voor de numerieke typen:
| subklassen | numbers.Number | numbers.Integral | numbers.Rational | numbers.Real | numbers.Complex |
|---|---|---|---|---|---|
| bool | ✓ | ✓ | ✓ | ✓ | ✓ |
| int | ✓ | ✓ | ✓ | ✓ | ✓ |
| fractions.Fraction | ✓ | - | ✓ | ✓ | ✓ |
| vlotter | ✓ | - | - | ✓ | ✓ |
| complex | ✓ | - | - | - | ✓ |
| decimal.Decimal | ✓ | - | - | - | - |
toevoeging
a, b = 1, 2
# Using the "+" operator:
a + b # = 3
# Using the "in-place" "+=" operator to add and assign:
a += b # a = 3 (equivalent to a = a + b)
import operator # contains 2 argument arithmetic functions for the examples
operator.add(a, b) # = 5 since a is set to 3 right before this line
# The "+=" operator is equivalent to:
a = operator.iadd(a, b) # a = 5 since a is set to 3 right before this line
Mogelijke combinaties (ingebouwde types):
-
intenint(geeft eenint) -
intenfloat(geeft eenfloat) -
intencomplex(geeft eencomplex) -
floatenfloat(geeft eenfloat) -
floatencomplex(geeft eencomplex) -
complexencomplex(geeft eencomplex)
Opmerking: de operator + wordt ook gebruikt voor het samenvoegen van tekenreeksen, lijsten en tupels:
"first string " + "second string" # = 'first string second string'
[1, 2, 3] + [4, 5, 6] # = [1, 2, 3, 4, 5, 6]
aftrekking
a, b = 1, 2
# Using the "-" operator:
b - a # = 1
import operator # contains 2 argument arithmetic functions
operator.sub(b, a) # = 1
Mogelijke combinaties (ingebouwde types):
-
intenint(geeft eenint) -
intenfloat(geeft eenfloat) -
intencomplex(geeft eencomplex) -
floatenfloat(geeft eenfloat) -
floatencomplex(geeft eencomplex) -
complexencomplex(geeft eencomplex)
Vermenigvuldiging
a, b = 2, 3
a * b # = 6
import operator
operator.mul(a, b) # = 6
Mogelijke combinaties (ingebouwde types):
-
intenint(geeft eenint) -
intenfloat(geeft eenfloat) -
intencomplex(geeft eencomplex) -
floatenfloat(geeft eenfloat) -
floatencomplex(geeft eencomplex) -
complexencomplex(geeft eencomplex)
Opmerking: de operator * wordt ook gebruikt voor herhaalde aaneenschakeling van strings, lijsten en tupels:
3 * 'ab' # = 'ababab'
3 * ('a', 'b') # = ('a', 'b', 'a', 'b', 'a', 'b')
Divisie
Python verdeelt gehele getallen wanneer beide operanden gehele getallen zijn. Het gedrag van de divisie-operatoren van Python is veranderd van Python 2.x en 3.x (zie ook Integer-divisie ).
a, b, c, d, e = 3, 2, 2.0, -3, 10
In Python 2 hangt het resultaat van de '/' -operator af van het type van de teller en de noemer.
a / b # = 1
a / c # = 1.5
d / b # = -2
b / a # = 0
d / e # = -1
Merk op dat omdat zowel a als b int s zijn, het resultaat een int .
Het resultaat wordt altijd naar beneden afgerond (verdieping).
Omdat c een float is, is het resultaat van a / c een float .
U kunt ook de bedieningsmodule gebruiken:
import operator # the operator module provides 2-argument arithmetic functions
operator.div(a, b) # = 1
operator.__div__(a, b) # = 1
Wat als u floatverdeling wilt:
Aanbevolen:
from __future__ import division # applies Python 3 style division to the entire module
a / b # = 1.5
a // b # = 1
Oké (als je niet wilt solliciteren op de hele module):
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
Niet aanbevolen (kan TypeError veroorzaken, bijvoorbeeld als het argument complex is):
float(a) / b # = 1.5
a / float(b) # = 1.5
De '//' -operator in Python 2 dwingt vloeren onderverdeeld ongeacht het type.
a // b # = 1
a // c # = 1.0
In Python 3 voert de / operator 'echte' deling uit, ongeacht de typen. De operator // voert vloerdeling uit en behoudt het type.
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
Mogelijke combinaties (ingebouwde types):
-
intenint(geeft eenintin Python 2 en eenfloatin Python 3) -
intenfloat(geeft eenfloat) -
intencomplex(geeft eencomplex) -
floatenfloat(geeft eenfloat) -
floatencomplex(geeft eencomplex) -
complexencomplex(geeft eencomplex)
Zie PEP 238 voor meer informatie.
exponent
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
Een ander verschil tussen de ingebouwde pow en math.pow is dat de ingebouwde pow drie argumenten kan accepteren:
a, b, c = 2, 3, 2
pow(2, 3, 2) # 0, calculates (2 ** 3) % 2, but as per Python docs,
# does so more efficiently
Speciale functies
De functie math.sqrt(x) berekent de vierkantswortel van 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)
Om andere wortels te berekenen, zoals een kubuswortel, verhoogt u het getal naar de reciproke graad van de wortel. Dit kan gedaan worden met elk van de exponentiële functies of operator.
import math
x = 8
math.pow(x, 1/3) # evaluates to 2.0
x**(1/3) # evaluates to 2.0
De functie math.exp(x) berekent e ** x .
math.exp(0) # 1.0
math.exp(1) # 2.718281828459045 (e)
De functie math.expm1(x) berekent e ** x - 1 . Wanneer x klein is, geeft dit een aanzienlijk betere precisie dan 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...
logaritmen
Standaard berekent de functie math.log de logaritme van een getal, base e. U kunt optioneel een basis opgeven als het tweede argument.
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)
Er zijn speciale variaties van de functie math.log voor verschillende bases.
# 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)
In-situ bewerkingen
Het is gebruikelijk in applicaties om code als deze te hebben:
a = a + 1
of
a = a * 2
Er is een effectieve snelkoppeling voor deze in-place bewerkingen:
a += 1
# and
a *= 2
Elke wiskundige operator kan vóór het teken '=' worden gebruikt om een interne bewerking uit te voeren:
-
-=verlaag de variabele op zijn plaats -
+=verhoog de variabele op zijn plaats -
*=vermenigvuldig de variabele op zijn plaats -
/=verdeel de variabele op zijn plaats -
//=verdieping verdeel de variabele op zijn plaats # Python 3 -
%=retourneer de modulus van de variabele op zijn plaats -
**=verheffen tot een macht op zijn plaats
Er bestaan andere operatoren voor de bitsgewijze operatoren ( ^ , | etc)
Goniometrische functies
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
Merk op dat
math.hypot(x, y)ook de lengte is van de vector (of Euclidische afstand) vanaf de oorsprong(0, 0)tot het punt(x, y).Om de Euclidische afstand tussen twee punten
(x1, y1)&(x2, y2)te berekenen(x2, y2)kunt umath.hypotals volgt gebruikenmath.hypot(x2-x1, y2-y1)
Om te converteren van radialen -> graden en graden -> radialen gebruikt u respectievelijk math.degrees en math.radians
math.degrees(a)
# Out: 57.29577951308232
math.radians(57.29577951308232)
# Out: 1.0
modulus
Zoals in veel andere talen, gebruikt Python de operator % voor het berekenen van de modulus.
3 % 4 # 3
10 % 2 # 0
6 % 4 # 2
Of door de operator gebruiken:
import operator
operator.mod(3 , 4) # 3
operator.mod(10 , 2) # 0
operator.mod(6 , 4) # 2
U kunt ook negatieve getallen gebruiken.
-9 % 7 # 5
9 % -7 # -5
-9 % -7 # -2
Als u het resultaat van gehele getallen en modulus moet vinden, kunt u de divmod functie gebruiken als snelkoppeling:
quotient, remainder = divmod(9, 4)
# quotient = 2, remainder = 1 as 4 * 2 + 1 == 9