2012-06-20 2 views
1
function_to_test(test, mylist): #test as an int, mylist as a list of int 
    do_something  
    return something 

function_generates_a_list(min, max): #min, max are int 
    do_something 
    return a_List 

function_to_test와이 중 하나만 시간을 측정해야합니다. 목적은 int가 int 목록에 있는지 테스트하는 것이 최선인지를 결정하기 위해 코드를 테스트하는 것입니다. (test은 googolplex이며 mylist은 분에서 최대까지 거대한 목록입니다.) 예, 저는 이미 그 기능의 결과를 알고 있습니다. 비용이 얼마나 많이들 것인지 알아야합니다.파이썬 3.2.3에서 매개 변수 함수로리스트를 timeit 호출로 전달하는 방법은 무엇입니까?

내 문제는 : 테스트 할 함수의 로컬 매개 변수로 전역 목록을 전달하려면 구문을 사용하여 timeit과 함께 사용해야합니까?

+0

변수 이름으로'list'를 사용하지 마십시오. –

+0

'function_generates_a_list()'는 테스트되지 않습니다. 그것은 단지 시간이 지켜 져야했던'function_to_test '에 필요한 목록을 생성합니다. –

+0

당신은 googolplex를 포함하는'int'가 없다고 확신합니다. 그건 꽤 저장 공간이 필요할거야. –

답변

1

이 작업을 수행하는 가장 쉬운 방법은 인수가없는 함수를 만드는 것입니다, 그리고 그것을 필요로 어떤 인수로 함수를 호출 그런 다음 timeit(newfunc)를 호출 할 수 있습니다

mylist = function_generates_a_list() 
def newfunc(): 
    function_to_test(mylist) 

. 람다 표현식을 사용하여 이것을 수행 할 수도 있습니다 - timeit(lambda: function_to_test(mylist))은 정확히 위와 같습니다. 당신이 사용하는 경우 timeit 모듈 현명한 (즉, python -m timeit ...을하고), 당신은 또한이 작업을 수행 할 수 있습니다 :

python -m timeit --setup='import mymodule' 'mymodule.newfunc()' 

당신은 충분히 복잡한 setup 문자열을함으로써 newfunc을 가진 완전히 피할 수 (function_generates_a_list에 대한 호출이되어야한다 설정에서 (아마도 여기처럼) 모듈을 가져올 때 일어날 필요는 없지만, 타이밍에 포함시키지 않으려는 경우), 기능을 사용하면 작업을보다 유연하고 덜 성가 시게 만들 수 있습니다.

+0

어, 나는 정말로 오늘 일어 났는지 확신하지 못했다 :) THX COOP! –

관련 문제