Odpowiedzi:
W Pythonie 3.x 5 / 2powróci 2.5i 5 // 2powró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 // 2wróci, 2.0ponieważ 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 / 2powraca 2.5we 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.0da 0.5, ale obie 1/2, 1//2i 1.0//2.0dadzą 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 oldczy-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 = 4i 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//2powoduje 2.0, a nie 2dlatego, ż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.