Anders dan de standaard operators +
, -
, *
en /
; maar wat betekenen deze (**
, ^
, %
, //
) ?
>>> 9+float(2) # addition
11.0
>>> 9-float(2) # subtraction
7.0
>>> 9*float(2) # multiplication
18.0
>>> 9/float(2) # division
4.5
>>>
>>> 9**float(2) # This looks like a square, (i.e. power 2)
81.0
>>> 9**float(3) # So ** is equivalent to `math.pow(x,p)` ?
729.0
Hoe zit het met de operator ^
?
>>> 9^int(2) # What is `^` in `x^u` , it only allows `int` for `u`
11
>>> 9^int(3)
10
>>> 9^int(4)
13
>>> 9^int(5)
12
>>> 9^int(6)
15
>>> 9^int(7)
14
>>> 9^int(8)
1
>>> 9^int(9)
0
>>> 9^int(10)
3
>>> 9^int(11)
2
>>> 9^int(12)
5
%
in x%m
retourneert een normale restmodulus, maar alleen als m < x
, waarom is dat zo? Wat doet %
?
>>> 9%float(2)
1.0
>>> 9%float(3)
0.0
>>> 9%float(4)
1.0
>>> 9%float(5)
4.0
>>> 9%float(6)
3.0
>>> 9%float(7)
2.0
>>> 9%float(8)
1.0
>>> 9%float(9)
0.0
>>> 9%float(10)
9.0
>>> 9%float(11)
9.0
>>> 9%float(12)
9.0
Hoe zit het met de operator //
? wat doet het?
>>> 9//float(2)
4.0
>>> 9//float(3)
3.0
>>> 9//float(4)
2.0
>>> 9//float(5)
1.0
>>> 9//float(6)
1.0
>>> 9//float(7)
1.0
>>> 9//float(8)
1.0
>>> 9//float(9)
1.0
>>> 9//float(1)
9.0
>>> 9//float(0.5)
18.0
Antwoord 1, autoriteit 100%
**
: machtsverheffing^
: exclusief-of (bitsgewijs)%
: modulus//
: delen met integraal resultaat (rest weggooien)
Antwoord 2, autoriteit 29%
Je kunt al deze operators echter vinden in de Python-taalreferentieje zult een beetje moeten scrollen om ze allemaal te vinden. Zoals andere antwoorden al hebben gezegd:
- De operator
**
voert machtsverheffen uit.a ** b
isa
tot de machtb
verheven. Hetzelfde**
-symbool wordt ook gebruikt in functieargumenten en aanroepnotaties, met een andere betekenis (willekeurige trefwoordargumenten doorgeven en ontvangen). - De operator
^
doet een binaire xor.a ^ b
retourneert een waarde met alleen de bits die zijn ingesteld ina
of inb
, maar niet beide. Deze is eenvoudig! - De
%
operator is meestal om de modulus van twee gehele getallen te vinden.a % b
Retourneert het restant na het delen vana
doorb
. In tegenstelling tot de Modulus-operators in een aantal andere programmeertalen (zoals C), heeft een modulus in Python een modulus hetzelfde teken alsb
, in plaats van hetzelfde bord alsa
. Dezelfde operator wordt ook gebruikt voor de “oude” stijl van string-opmaak, dusa % b
kan een string retourneren alsa
een indelingsreeks is enb
is een waarde (of tuple van waarden) die ina
kan worden ingevoegd. - De
//
Operator doet Python’s versie van Integer Division. Python’s Integer-divisie is niet precies hetzelfde als de integer-divisie die wordt aangeboden door een aantal andere talen (zoals C), omdat het rondet naar negatieve oneindigheid, in plaats van naar nul. Samen met de Modulus-operator kunt u zeggen data == (a // b)*b + (a % b)
. In Python 2 is Floor Division het standaardgedrag wanneer u twee gehele getallen verdeelt (met behulp van de normale divisie-exploitant/
). Aangezien dit onverwacht kan zijn (vooral als u niet kieskeurig bent over welke soorten nummers u als argumenten voor een functie krijgt), is Python 3 gewijzigd om “True” (drijvend punt) divisie de norm voor divisie te maken die zou worden afgesloten Anders, en het zal alleen “vloer” divisie doen wanneer expliciet wordt gevraagd. (Je kunt ook het nieuwe gedrag in Python 2 krijgen doorfrom __future__ import division
bovenaan je bestanden te plaatsen. Ik raad het ten zeerste aan!)
Antwoord 3, Autoriteit 8%
U klopt dat **
de stroomfunctie is.
^
is bitwise XOR.
%
is inderdaad de modulusbewerking, maar noteer dat voor positieve cijfers, x % m = x
wanneer m > x
. Dit volgt uit de definitie van modulus. (Bovendien specificeert Python x % m
om het teken van m
te hebben.)
//
is een divisiebewerking die een geheel getal retourneert door het restant te verwijderen. Dit is de standaardvorm van divisie met behulp van de /
in de meeste programmeertalen. Python 3 veranderde het gedrag van /
om drijvende divisie uit te voeren, zelfs als de argumenten geheel getallen zijn . De operator //
werd geïntroduceerd in Python 2.6 en Python 3 om een integer-divisie-operator te verschaffen die zich consequent zou gedragen tussen Python 2 en Python 3. Dit betekent:
| context | `/` behavior | `//` behavior |
---------------------------------------------------------------------------
| floating-point arguments, Python 2 & 3 | float division | int divison |
---------------------------------------------------------------------------
| integer arguments, python 2 | int division | int division |
---------------------------------------------------------------------------
| integer arguments, python 3 | float division | int division |
Zie deze vraag voor meer informatie: Divisie in Python 2.7. en 3.3