파이썬 정수 나누기 수레


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 : 그렇습니다. PEPfinal 입니다.
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.