2013-03-28 5 views
1

메서드에 개체를 전달하는 두 가지 방법으로 벤치 마크를 실행했는데 암시 적 개체 통과는 명시 적 메서드보다 시간이 적게 걸렸습니다. 제 책은 이것들이 똑같은 과정이라고 말합니다. 차이점은 무엇입니까? 내가 다음 코드 두 세트의 첫 번째 반환 317 루프 당 ns의 두 번째 반환 루프 당 400 NS 각각 'timeit'를 실행하면, 그래서암시 적 대 명시 적 개체 메서드 메모리 벤치 마크 차이

class Point: 
    def reset(self) 
     self.x = 0 
     self.y = 0 

:

먼저, 여기에 클래스 정의의 . 여기

p = Point() 
p.reset() 

을 그리고 명시 적으로 다른 것 : 여기 파이썬은 뒤에서 방법에 개체를 전달하는 내장 객체 메소드 통과 코드의

p = Point() 
Point.reset(p) 

누군가에 무슨 일이 일어나고 있는지 말해 줄 수 벤치 마크 차이를 설명하는 메모리 할당 수준? 한 가지 방법이 다른 것보다 더 '파이썬 적'인가? 왜 프로그래머는 다른 것보다 (속도 이상으로) 하나를 선택할 것입니까? reset 대신 클래스 Point의 classmethod가되는 객체 p하는 방법이기 때문에

, 나는 첫 번째 방법보다 파이썬이라고 생각

마이클

+0

나노초 의미입니까? 그렇다면 설명하는 차이가 너무 작아 실제적으로 거의 의미가 없으며 표시되는 코드 이외의 요소 (예 : 실행중인 다른 프로세스, 사용중인 메모리 등)가 원인 일 수 있습니다. 당신은 안정적으로 두 번째 것이 항상 느린 것을 확립 했습니까? – BrenBarn

+0

예, 테스트를 각각 25 회 실행하고 결과의 평균을 보았습니다. 나는 나노초를 의미한다. –

+0

@delnan, 나는 timeit을 사용했다. 바로 여기에 명확하게 명시되어 있습니다. "그래서, 다음 두 세트의 코드 각각에 ** timeit ** **을 실행하면 처음에는 루프 당 317 ns가 반환되고 두 번째 코드는 루프 당 400 ns를 반환합니다." 코멘트 주셔서 감사합니다. –

답변

0

, 감사합니다. 차이점은 기본적으로 reset 메서드가 Point 클래스 또는 Point 클래스의 개체에 속하는 것인가?

첫 번째 방법을 사용하면 코드를 더 쉽게 이해할 수 있고 두 번째 스타일을 사용하려면 staticmethod으로 지정하면 메서드가 인스턴스 대신 class에서 호출 될 예정임을 나타낼 수 있습니다 이는 다소 불량한 디자인 일 것입니다).

이것은 내 경험에 의한 것입니다.