Jaka jest różnica między ' / 'i'//', gdy używane są do podziału?

Czy jest korzyść z używania jednego nad drugim? W Pythonie 2 oba wydają się zwracać te same wyniki:

>>> 6/3
2
>>> 6//3
2
Author: Georgy, 2008-10-08

14 answers

W Pythonie 3.x, 5 / 2 zwróci 2.5 i 5 // 2 zwróci 2. Pierwszy jest podziałem zmiennoprzecinkowym, a drugi jest podział podłogi, czasami nazywany równieżpodział liczb całkowitych.

W Pythonie 2.2 lub nowszym W 2.x linii, nie ma różnicy dla liczb całkowitych, chyba że wykonasz from __future__ import division, co powoduje, że Python 2.x do przyjęcia 3.x zachowanie.

Niezależnie od przyszłego importu, 5.0 // 2 powróci 2.0, ponieważ jest to piętro wynik podziału operacji.

Szczegółowy opis znajdziesz na stronie https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator

 695
Author: Eli Courtwright,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-28 20:29:34

Python 2.x:

Aby wyjaśnić dla Pythona 2.linia x, / nie jest ani dzieleniem podłogi, ani dzieleniem rzeczywistym. Obecna akceptowana odpowiedź nie jest jasna w tej kwestii.

/ jest dzieleniem, gdy oba args są int, ale jest dzieleniem, gdy jedno lub oba args są float.

Powyższe mówi więcej prawdy i jest bardziej jasne niż drugi akapit w zaakceptowanej odpowiedzi.

 70
Author: Yichun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-08 17:56:43

// wdraża "podział podłogi", niezależnie od typu. Więc 1.0/2.0 da 0.5, ale oba 1/2, 1//2 i 1.0//2.0 da 0.

Zobacz https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator dla szczegółów

 33
Author: Kena,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-13 08:24:27

/ --> podział zmiennoprzecinkowy

// --> podział podłogi

Pozwala zobaczyć kilka przykładów zarówno w Pythonie 2.7, jak i w 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 samo wyjście 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 jako że nie ma różnicy między podziałem podłogi w zarówno w Pythonie 2.7 jak i w 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
 30
Author: N Randhawa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-03 11:45:03

Jak już wszyscy odpowiedzieli, // jest podział podłogi.

Dlaczego jest to ważne jest to, że // jest jednoznacznym podziałem we wszystkich wersjach Pythona od 2.2, w tym Pythona 3.wersje X.

Zachowanie / może się zmieniać w zależności od:

  • Active __future__ import or not (module-local)
  • opcja wiersza poleceń Pythona, -Q old lub -Q new
 22
Author: u0b34a0f6ae,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-09 23:55:18
>>> print 5.0 / 2
2.5

>>> print 5.0 // 2
2.0
 12
Author: Jonas Sciangula Street,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-18 18:23:48

Python 2.7 i inne nadchodzące wersje Pythona:

  • Dywizja (/)

Dzieli operand lewej ręki przez operand prawej ręki

Przykład: 4 / 2 = 2

  • Podział Podłogi (//)

Podział operandów, gdzie wynikiem jest iloraz, w którym cyfry po przecinku są usuwane. Ale jeśli jeden z operandów jest ujemny, wynik jest floored, tzn. zaokrąglony od zera (w kierunku ujemnym nieskończoność): {]}

Przykłady: 9//2 = 4 i 9.0//2.0 = 4.0, -11//3 = -4, -11.0//3 = -4.0

Zarówno / podział, jak i // operator podziału piętra działają w podobny sposób.

 6
Author: Abrar Ahmad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-06 06:33:11

Podwójny ukośnik, //, jest podziałem podłogi:

>>> 7//3
2
 4
Author: Mark Roddy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-02 19:35:01

// jest dzieleniem podłogi, to zawsze daje całkowitą podłogę wyniku. Drugi to podział "regularny".

 3
Author: Adam Bellaire,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-08 17:19:15

ODPOWIEDŹ równania jest zaokrąglana do następnej mniejszej liczby całkowitej lub float with .0 jako punkt dziesiętny.

>>>print 5//2
2
>>> print 5.0//2
2.0
>>>print 5//2.0
2.0
>>>print 5.0//2.0
2.0
 2
Author: G.Ant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-03 15:26:43

Powyższe odpowiedzi są dobre. Chcę dodać jeszcze jeden punkt. Do niektórych wartości oba z nich dają ten sam iloraz. Po tym Operator dzielenia podłogi (//) działa dobrze, ale nie operator dzielenia (/).

 - > int(755349677599789174/2)
 - > 377674838799894592      #wrong answer
 - > 755349677599789174 //2
 - > 377674838799894587      #correct answer
 2
Author: jaya ram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-06 04:37:50
  • // jest dzieleniem podłogi, zawsze da ci wartość podłogi wyniku.
  • a drugi {[2] } jest dzieleniem zmiennoprzecinkowym.

Następstwa są różnicą między / A //; Wykonał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
 0
Author: Fatema T. Zuhora,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-17 11:56:14

Python 3.X

Aby uzupełnić kilka poprzednich odpowiedzi.

Warto zaznaczyć, że:

A / / b

  • Jest dzieleniem podłogi . Jak w:

    Matematykafloor (A / b)

  • Nie jest int division . Jak w:

    Int (a / b)

  • Nie jest Okrągły do 0. Jak w:

    Round (A / b, 0)

Jako konsekwencja, sposób zachowania się jest inny, jeśli chodzi o liczby pozytywne i negatywne, jak w poniższym przykładzie:

1 / / 2 jest 0, jak w:

Matematykafloor (1/2)

-1 / / 2 to -1, jak w:

Matematykafloor (-1 / 2)

 0
Author: villamejia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-02-13 20:25:01

5.0//2 powoduje to 2.0, a nie 2, Ponieważ typ zwracany wartości zwracanej z operatora // jest zgodny z regułami Pythona coercion (type casting).

Python Promuje konwersję niższego typu danych (integer) na wyższy typ danych (float), aby uniknąć utraty danych.

 -1
Author: Sebastian Purakan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-09 22:55:33