sourcecode

Python에서 '//'를 사용하는 이유는 무엇입니까?

copyscript 2022. 9. 21. 23:25
반응형

Python에서 '//'를 사용하는 이유는 무엇입니까?

누군가의 암호에서 이걸 봤어

y = img_index // num_images

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

내가 장난칠 때//IPython에서는 분할 부호(즉, 슬래시 1개)와 같이 동작하는 것처럼 보입니다.혹시 더블포워드 슬래시가 생기는 이유가 있나요?

Python 3에서, 그들은 다음과 같이 만들었습니다./연산자는 부동소수점 나눗셈을 수행하고,//정수 나눗셈을 수행하는 연산자(예: 나머지가 없는 몫); 반면 Python 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

Python 3의 경우:

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

자세한 내용은 PEP238을 참조하십시오.

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

>>> 4.0//1.5
2.0

보시다시피 양쪽 오퍼랜드가floats,// 바닥은 그대로입니다.그래서 어떤 기능을 하는지 항상 확실하게 알 수 있습니다.

싱글/Python 릴리즈, 향후 Import, 심지어 Python이 실행되는 플래그에 따라 플로어 또는 플로어되지 않을 수 있습니다.예:

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

보다시피 싱글입니다./완전히 로컬이 아닌 문제에 근거하여 플로어 또는 플로트를 반환할 수 있으며, 이 플로트 값은 다음 값까지입니다.-Q플래그...;-).

그래서 바닥재가 필요한 경우에는 항상//그게 그걸 보장해 주죠바닥이 필요없다는 걸 알았을 때,float()다른 오퍼랜드 및 사용 주위에/다른 조합도 버전, Import, 플래그에 좌우됩니다.-)

이러한 다른 답변을 보완하기 위해//오퍼레이터는 퍼포먼스의 대폭적인 이점(3배)도 제공합니다./(정수 나눗셈이 필요한 것을 전제로 합니다).

$ python -m timeit '20.5 // 2'
100,000,000 loops, best of 3: 14.9 nsec per loop

$ python -m timeit '20.5 / 2'
 10,000,000 loops, best of 3: 48.4 nsec per loop

$ python -m timeit '20 / 2'
 10,000,000 loops, best of 3: 43.0 nsec per loop

$ python -m timeit '20 // 2'
100,000,000 loops, best of 3: 14.4 nsec per loop

Alex의 답변을 보완하기 위해 Python 2.2.0a2부터는from __future__ import division를 많이 사용하는 것에 대한 편리한 대체 수단입니다.float(…)/…모든 부서가 플로트 분할을 수행합니다. 단, 다음과 같은 부서가 있는 경우는 제외합니다.//이 기능은 2.2.0a2 이후의 모든 버전에서 작동합니다.

//type의 반환값을 가진 분할의 경우 math.floor()의 에일리어스로 간주할 수 있습니다.float이 기능은 다음과 같이 동작합니다.no-op유형 반환 값이 있는 분할의 경우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

반응형