how to pass parameters of a function when using timeit.Timer()

前端 未结 12 1809
礼貌的吻别
礼貌的吻别 2020-12-02 10:19

This is the outline of a simple program

# some pre-defined constants
A = 1
B = 2

# function that does something critical
def foo(num1, num2):
    # do somet         


        
12条回答
  •  旧巷少年郎
    2020-12-02 11:03

    The functions can use arguments in timeit if these are created using closures, we can add this behaviours by wrapping them in another function.

    def foo(num1, num2):
        def _foo():
            # do something to num1 and num2
            pass
        return _foo
    
    A = 1
    B = 2
    
    import timeit
    t = timeit.Timer(foo(A,B))  
    print(t.timeit(5))
    

    or shorter, we can use functools.partial instead of explicit closures declaration

    def foo(num1, num2):
        # do something to num1 and num2
        pass
    
    A = 1
    B = 2
    
    import timeit, functools
    t = timeit.Timer(functools.partial(foo, A, B)) 
    print(t.timeit(5))
    

    EDIT using lambda, thanks @jupiterbjy

    we can use lambda function without parameters instead of functools library

    def foo(num1, num2):
        # do something to num1 and num2
        pass
    
    A = 1
    B = 2
    
    import timeit
    t = timeit.Timer(lambda: foo(A, B)) 
    print (t.timeit(5))
    

提交回复
热议问题