파이썬 정수 나누기 수레


223
Python 3.1 (r31:73574, Jun 26 2009, 20:21:35) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 2/2
1.0

이것이 의도 된 것입니까? 나는 이전 버전이 돌아 오는 것을 강력하게 기억하고 int/int=int있습니까? 어떻게해야합니까, 새로운 부서 교환 원이 있습니까? 아니면 항상 출연해야합니까?


31
그렇습니다. 3.x에서 부서가 작동하는 방식입니다.
— hughdbrown 09 년

2
다음은 Python의 작성자가 반올림이 작동하는 방식에 대해 이야기하는 글입니다. 질문과 직교하지만 흥미로운 것을 발견했습니다. python-history.blogspot.com/2010/08/…
— Aaron D

@ hughdbrown 그래서 모든 파이썬 3 버전을 본질적으로 의미합니까?
— Charlie Parker

@ hughdbrown : 그렇습니다. PEP 는 final 입니다.
— Jonas Byström

답변:


285

PEP-238 살펴보기 : Division Operator 변경

// 연산자는 층 구분을 명확하게 요청할 수 있습니다.


10
python 2.0 용으로 작성된 모든 코드를 제외한 @JonathanSternberg 나는 /와 //의 역할이 역 호환성을 유지하기 위해 역전되어야한다고 생각합니다. 또한 거의 모든 다른 언어로 유형을 유지합니다. // //가 아닌 float로 자동 변환하는 것이 더 합리적입니다.
— thang

1
두 번째 부분 ( "Also"이후)은 의미가 있지만 (다른 언어와 유사 함) 첫 번째 부분과 관련하여 Python 3의 요점 은 Python 2와 역 호환되지 않고 오히려 Python의 많은 문제를 해결하는 것이 었습니다 2. /파이썬 3에서 고쳐야 할 언어 디자인 "실수"가 충분하다는 충분한 사람들이 충분히 발견했습니다. 논란의 여지가있는 결정 일지 모르지만 충분한 사람들은 그것이 올바른 것이라고 생각했습니다. 변화를 좋아하는 그룹에서 저를 센다. 우리 모두 동의하지 않을 수 있다는 것은 좋은 일입니다. 건배. :)
— Ray Toal

59

죄송합니다 2//2.


5
좀 더 자세히 설명해 주시겠습니까?
— blueFast

4
이것을 사용하면 float @dangonfast가 아닌 int가 출력됩니다.
— Ashish Ahuja

음수에는 작동하지 않는 것 같습니다. -1 // 5는 -1을 반환하고 -5 // 5는 -1을 반환합니다.
— mschuett

@mschuett : 이것은 예상되며, 파이썬 2와 같은 결과입니다.
— Jonas Byström

1
그래, 좀 더 파고 그도 알아 냈습니다. 그러나 나는 적당한 크기의 사람들이 언어에 따라 이것을 깨닫지 못한다고 생각합니다.
— mschuett

45

그것이 누군가를 즉시 도울 수 있기를 바랍니다.

Python 2.7 및 Python 3의 Division 연산자 동작

Python 2.7 : 기본적으로 나누기 연산자는 정수 출력을 리턴합니다.

"배당 또는 제수" 에 2 배의 1.0 을 곱한 결과

100/35 => 2 #(Expected is 2.857142857142857)
(100*1.0)/35 => 2.857142857142857
100/(35*1.0) => 2.857142857142857

파이썬 3에서

// => used for integer output
/ => used for double output

100/35 => 2.857142857142857
100//35 => 2
100.//35 => 2.0    # floating-point result if divsor or dividend real

1
그건 그렇고, 1.0을 곱할 필요가 없습니다. 숫자 중 하나가 부동 소수점이면 충분합니다. 예를 들어, 100 / 35.0 = 100.0 / 35 = 2.857142857142857
— 탈 J. 레비

21

수락 된 답변은 이미 PEP 238을 언급하고 있습니다. PEP 전체를 읽지 않고 진행중인 작업에 관심이있는 사람들을 위해이면에 훑어보기를 원합니다.

파이썬은 같은 연산자를 매핑 +, -, *및 /특수 기능, 그러한 예를 들어 있음은 a + b동일합니다

a.__add__(b)

파이썬 2의 분할에 대해서는, 거기에만 디폴트로 /에 맵핑 __div__하고, 결과는 입력 유형에 의존한다 (예를 들어 int, float).

Python 2.2는이 __future__기능을 도입하여 division부서 의미를 다음과 같은 방식으로 변경했습니다 (TL; DR of PEP 238).

  • /__truediv__"분할의 수학적 결과에 대한 합리적인 근사값을 반환해야하는" 맵 (PEP 238에서 인용)
  • //에 __floordiv__대한 층별 결과를 반환해야합니다./

Python 3.0에서는 PEP 238의 변경 사항이 기본 동작이되었으며 더 이상 __div__Python의 객체 모델에 특별한 방법이 없습니다 .

Python 2 및 Python 3에서 동일한 코드를 사용하려면

from __future__ import division

와 PEP 238의 의미 스틱 /과 //.


0

Python3 문서에 따르면, 파이썬은 정수로 나눌 때 정수가 될 것으로 예상되지만 float를 생성합니다.

정수만 인쇄하려면를 사용하십시오 floor division method. 바닥 분할은 0을 반올림하고 소수점을 제거합니다.Represented by //

따라서 2/2 대신에 사용 2//2

__future__python2 또는 python3 사용 여부와 상관없이 부서를 가져올 수도 있습니다.

그것이 도움이되기를 바랍니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.