Odpowiedzi:
W Pythonie 3.x 5 / 2
powróci 2.5
i 5 // 2
powróci 2
. Pierwszy z nich to dzielenie zmiennoprzecinkowe, a drugi to podział podłogowy , czasem nazywany także dzieleniem całkowitym .
W Pythonie 2.2 lub nowszym w wierszu 2.x nie ma różnicy dla liczb całkowitych, chyba że wykonasz a from __future__ import division
, co powoduje, że Python 2.x przyjmuje zachowanie 3.x.
Niezależnie od przyszłego importu, 5.0 // 2
wróci, 2.0
ponieważ jest to wynik podziału podłogi operacji.
Szczegółowy opis można znaleźć na stronie https://docs.python.org/whatsnew/2.2.html#pep-238-zmienianie-the-division-operator
python -Qnew
. inne opcje podziału: -Qold
(domyślnie), -Qwarn
,-Qwarnall
5.0 / 2
powraca 2.5
we wszystkich wersjach, podobnie jak 5 / 2.0
- stare zachowanie różni się tylko wtedy, gdy oba operandy są int
.
Wyjaśnienie linii Python 2.x /
nie jest ani podziałem podłogi, ani podziałem prawdziwym. Obecna akceptowana odpowiedź nie jest w tym zakresie jasna.
/
jest podziałem podłogi, gdy oba argumenty są int
, ale jest prawdziwym podziałem, gdy jeden lub oba argumenty są float
.
Powyższe mówi więcej prawdy i jest bardziej jasne niż drugi akapit w przyjętej odpowiedzi.
//
wdraża „podział podłogi”, niezależnie od typu. Tak
1.0/2.0
da 0.5
, ale obie 1/2
, 1//2
i 1.0//2.0
dadzą 0
.
Szczegółowe informacje można znaleźć na stronie https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator
math.floor()
lub, math.fmod()
jeśli nie jesteś pewien, co się dzieje z jednostkowymi operatorami.
/
i //
są podwójnymi operatorami (dwa operandy, lewy i prawy, licznik i mianownik)
/ -> Dzielenie zmiennoprzecinkowe
// -> Podział podłogi
Zobaczmy przykłady w Pythonie 2.7 i Pythonie 3.5.
Python 2.7.10 vs. Python 3.5
print (2/3) ----> 0 Python 2.7
print (2/3) ----> 0.6666666666666666 Python 3.5
Python 2.7.10 vs. Python 3.5
print (4/2) ----> 2 Python 2.7
print (4/2) ----> 2.0 Python 3.5
Teraz, jeśli chcesz mieć (w Pythonie 2.7) takie same dane wyjściowe jak w Pythonie 3.5, możesz wykonać następujące czynności:
Python 2.7.10
from __future__ import division
print (2/3) ----> 0.6666666666666666 #Python 2.7
print (4/2) ----> 2.0 #Python 2.7
Gdzie, ponieważ nie ma różnicy między podziałem podłogi w Pythonie 2.7 i Pythonie 3.5
138.93//3 ---> 46.0 #Python 2.7
138.93//3 ---> 46.0 #Python 3.5
4//3 ---> 1 #Python 2.7
4//3 ---> 1 #Python 3.5
-100 // 33
=> -4 ; 100 // -33
=> -4 ; ale ze względu na zaokrąglanie funkcji podłogi, następny może wydawać się sprzeczny z intuicją w porównaniu do poprzedniego: -100 // -33
=> 3 .
Jak wszyscy już odpowiedzieli, //
jest podział podłogi.
Ważne jest to, że //
jest to jednoznaczny podział podłogi we wszystkich wersjach Python od 2.2, w tym w wersjach Python 3.x.
Zachowanie /
może się zmienić w zależności od:
__future__
import, czy nie (moduł lokalny)-Q old
czy-Q new
>>> print 5.0 / 2
2.5
>>> print 5.0 // 2
2.0
Python 2.7 i inna nadchodząca wersja Pythona:
/
)Dzieli operand lewej ręki na operand prawej ręki
Przykład: 4 / 2 = 2
//
)Podział argumentów, w którym wynikiem jest iloraz, w którym cyfry po przecinku są usuwane. Ale jeśli jeden z operandów jest ujemny, wynik jest zmienny, tzn. Zaokrąglony od zera (w kierunku ujemnej nieskończoności):
Przykłady: 9//2 = 4
i 9.0//2.0 = 4.0
, -11//3 = -4
,-11.0//3 = -4.0
Zarówno /
dział, jak i //
operator działu pięter działają w podobny sposób.
Podwójny ukośnik //
, to podział podłogi:
>>> 7//3
2
//
jest podział podłogi, zawsze da ci całkowitą podłogę wyniku. Drugi to podział „zwykły”.
Powyższe odpowiedzi są dobre. Chcę dodać kolejny punkt. Do niektórych wartości obie z nich dają ten sam iloraz. Po tej operacji operator podziału ( //
) działa poprawnie, ale nie /
operator podziału ( ).
- > int(755349677599789174/2)
- > 377674838799894592 #wrong answer
- > 755349677599789174 //2
- > 377674838799894587 #correct answer
5.0//2
powoduje 2.0
, a nie 2
dlatego, że typ zwracanej wartości zwracanej z//
operatora jest zgodny z regułami koercji python (rzutowanie typu).
Python promuje konwersję niższego typu danych (liczba całkowita) na wyższy typ danych (liczba zmiennoprzecinkowa), aby uniknąć utraty danych.
//
to podział podłogi, zawsze da ci wartość końcową wyniku./
to podział zmiennoprzecinkowy.Poniżej przedstawiono różnicę między /
i //
; Uruchomiłem te operacje arytmetyczne w Pythonie 3.7.2
>>> print (11 / 3)
3.6666666666666665
>>> print (11 // 3)
3
>>> print (11.3 / 3)
3.7666666666666667
>>> print (11.3 // 3)
3.0
//
podziałem na liczby całkowite, aby poznać powód wprowadzenia operatora do dzielenia na liczby całkowite.