2017-02-07 4 views
-1

작동 :?파이썬에서`round`와`__round__`의 차이점은 무엇입니까? 파이썬 3이에서

Fahrenheit = map(lambda x: ((float(9/5))*x + 32).round(3), Celsius) 

또한, 파이썬 스크립트의 nowdays의 많은이 이전 형식 __round__을 사용하지 않는 이유는,이 작동하지 않습니다

Celsius = [39.2, 45.2, 37.3, 37.8, 89] 
Fahrenheit = map(lambda x: ((float(9/5))*x + 32).__round__(3), Celsius) 

print(list(Fahrenheit)) 

[102.56, 113.36, 99.14, 100.04, 192.2] 

을하지만 스크립트를 더 깨끗하게 보이게하는 이유를 생각해보십시오. 다른 핵심적인 이유는 무엇입니까?

+2

'__round__'은 * 후크 방식 *입니다. 'round()'함수를 사용하면, 필요에 따라'round ((float (9/5)) * x + 32), 3)'훅 메소드를 사용할 것이다. 그러나,'float (9/5)'는 잘못된 값이고'9.0/5'를 원합니다. –

+0

하지만 왜 float에서는'round (2)'가 작동하지 않습니다. 이것은 정말로 혼란 스럽다. – everestial007

+2

플로트에는'.round' 메서드가 없으므로 ...? 이것에 대해 명확하지 않은 점은 무엇입니까? –

답변

5

float.round() 방법은 없습니다. 대신에 round()function을 사용하여 값과 반올림 할 곳의 수를 전달하십시오.

round()은 반올림이 부동 소수점 숫자뿐만 아니라 모든 숫자 유형에 적용되는 연산이기 때문에 함수입니다. len()이 모든 시퀀스에 적용됩니다 (단지 list 또는 tuple 또는 str). str은 모든 Python 객체에 적용됩니다.

마찬가지로 모든 __*__ dunder 메서드와 마찬가지로 __round__ is a hook 사용자 지정 클래스는 해당 클래스에 대한 반올림 방법을 재정의 할 수 있습니다. round() 함수는 일부 다른 기능과 마찬가지로 출력을 생성 할 때이 함수를 사용합니다.

이 작동 : 여기 float(9/5)을 사용하지 않은

Fahrenheit = map(lambda x: round((9.0/5) * x + 32, 3), Celsius) 

주의! 파이썬 두 가지, 즉 1.0이 될 것이다 : 9/5는 정수 나눗셈을 이용하여 제 계산

>>> float(9/5) 
1.0 

때문이다. 당신은 / 사실 부문 (심지어 수레를 생산을 의미 여기 파이썬 3를 사용하는

>>> 9.0/5 
1.8 

: (피연산자 중 적어도 하나는 부동 소수점 값이기 때문에) 9.0/5, 그래서 당신에게 올바른 지수를 제공 부동 소수점 부문을 사용 정수 피연산자의 경우), float() 호출은 여전히 ​​중복됩니다.