Programing

파이썬에서 '//'를 갖는 이유는 무엇입니까?

lottogame 2020. 2. 27. 22:06
반응형

파이썬에서 '//'를 갖는 이유는 무엇입니까? [복제]


이 질문에는 이미 답변이 있습니다.

나는 누군가의 코드에서 이것을 보았다.

y = img_index // num_images

어디에서 img_index실행중인 인덱스와 num_images3입니다.

//IPython에서 엉망이되면 나누기 기호처럼 행동하는 것처럼 보입니다 (즉, 하나의 슬래시). 이중 슬래시가있는 이유가 있는지 궁금합니다.


파이썬 3에서는 /연산자가 부동 소수점 나누기 //를하도록하고 정수 나누기 (즉, 나머지가없는 몫)를하기 위해 연산자를 추가했습니다 . 반면 파이썬 2 /에서 피연산자 중 하나가 이미 부동 소수점 숫자가 아닌 한 연산자는 정수 나누기였습니다.

Python 2.X에서 :

>>> 10/3
3
>>> # to get a floating point number from integer division:
>>> 10.0/3
3.3333333333333335
>>> float(10)/3
3.3333333333333335

파이썬 3에서 :

>>> 10/3
3.3333333333333335
>>> 10//3
3

추가 참조는 PEP238을 참조하십시오 .


// 무조건 "바닥재 분할"입니다. 예 :

>>> 4.0//1.5
2.0

보시다시피, 두 피연산자가 모두 바닥 float이지만 // 여전히 수행 할 작업을 항상 알 수 있습니다.

/Python 릴리스, 향후 가져 오기 및 Python이 실행되는 플래그 (예 : ...)에 따라 Single 은 바닥에 있거나 바닥에 있지 않을 수 있습니다.

$ python2.6 -Qold -c 'print 2/3'
0
$ python2.6 -Qnew -c 'print 2/3'
0.666666666667

당신은 하나의 참조로 /5 월 바닥, 또는 그것의 값을 포함한까지 완전히 로컬이 아닌 문제를 기반으로, float를 반환하고 있습니다 -Q플래그 ... ;-).

따라서 바닥을 원한다는 것을 알고 있다면 항상을 사용 //하십시오. 바닥을 원하지 않는다는 것을 알고 있다면 float()다른 피연산자 주위를 때리고 를 사용하십시오 /. 다른 조합, 그리고 당신은 버전, 수입 및 깃발의 자비에 있습니다!-)


Alex의 답변을 보완하기 위해 Python 2.2.0a2부터는 from __future__ import division많은을 사용하는 편리한 대안 이라고 덧붙 입니다 float(…)/…. 모든 부서가 수행 플로트 있는 사람을 제외하고, 분열을 //. 이것은 2.2.0a2의 모든 버전에서 작동합니다.


이러한 다른 답변을 보완하기 위해 //연산자는 /정수 나누기를 원한다고 가정 하여에 비해 (3x) 성능상의 이점을 제공합니다 .

$ python -m timeit '20.5 // 2'
100000000 loops, best of 3: 0.0149 usec per loop
$ python -m timeit '20.5 / 2'
10000000 loops, best of 3: 0.0484 usec per loop
$ python -m timeit '20 / 2'
10000000 loops, best of 3: 0.043 usec per loop
$ python -m timeit '20 // 2'
100000000 loops, best of 3: 0.0144 usec per loop

//반환 값이 type 인 나누기의 경우 math.floor ()의 별칭으로 간주 될 수 있습니다 float. no-op반환 값이 type 인 나누기와 동일하게 작동 합니다 int.

import math
# let's examine `float` returns
# -------------------------------------
# divide
>>> 1.0 / 2
0.5
# divide and round down
>>> math.floor(1.0/2)
0.0
# divide and round down
>>> 1.0 // 2
0.0

# now let's examine `integer` returns
# -------------------------------------
>>> 1/2
0
>>> 1//2
0

참고 URL : https://stackoverflow.com/questions/1535596/what-is-the-reason-for-having-in-python



반응형