花费单行代码执行时间的最佳方法是什么?

时间:2019-08-28 11:00:10

标签: python python-3.x debugging time

我试图将执行时间花费在一行代码上。像下面的示例一样,每次执行多行代码和/或每次编写代码都令人沮丧。有一个更好的方法吗?请参见下面的示例。

import pandas as pd
import datetime

start_time = datetime.datetime.now()
df = pd.read_csv('dummy.csv')
print('Time spent reading: {}'.format(datetime.datetime.now() - start_time))
start_time = datetime.datetime.now()
df.head(n=100)
print('Time spent printing top 100: {}'.format(datetime.datetime.now() - start_time)) 

2 个答案:

答案 0 :(得分:1)

Python具有可变参数(以及关键字参数),参数默认值和一流的功能。基本上,这意味着您可以将一个函数及其可选的所有参数和关键字参数传入另一个函数。

public class Test15 {
public static void main(String[] args) {

    Map<String, List<String>> map1 = new HashMap<>();
    map1.put("London", Arrays.asList("A", "B", "C"));
    map1.put("Wales", Arrays.asList("P1", "P2", "P3"));

    Map<String, List<String>> map2 = new HashMap<>();
    map2.put("Calcutta", Arrays.asList("Protijayi", "Gina", "Gini"));
    map2.put("London", Arrays.asList( "P4", "P5", "P6"));
    map2.put("Wales", Arrays.asList( "P111", "P5555", "P677666"));

    System.out.println(map1);System.out.println(map2);




    /*
<T,K,U> Collector<T,?,Map<K,U>> toMap(

                                  Function<? super T,? extends K> keyMapper,

                                  Function<? super T,? extends U> valueMapper,

                                  BinaryOperator<U> mergeFunction)
    */


Map<String, List<String>> collect = Stream.of(map1,map2)
    .flatMap(ch -> ch.entrySet().stream())
    .collect(
            Collectors.toMap(

            //keyMapper,

            Entry::getKey,

            //valueMapper
            Entry::getValue,

            // mergeFunction
     (list_a,list_b) -> Stream.concat(list_a.stream(), list_b.stream()).collect(Collectors.toList())

            ));



    System.out.println("Final Result(Map after join) => " + collect);
    /*
    {Wales=[P1, P2, P3], London=[A, B, C]}
{Calcutta=[Protijayi, Gina, Gini], Wales=[P111, P5555, P677666], London=[P4, P5, P6]}
Final Result(Map after join) => {Calcutta=[Protijayi, Gina, Gini], Wales=[P1, P2, P3, P111, P5555, P677666], London=[A, B, C, P4, P5, P6]}

*/

}//main


}

请记住,一元组需要写为from datetime import datetime def record_time(task, args=(), kwargs={}): start_time = datetime.now() task(*args, **kwargs) return datetime.now() - start_time print(record_time(print, ("test", ))) ,而不是('foo', )


您还可以使用上下文管理器,使您可以计时代码块,而不仅仅是单个函数。

('foo')

从本质上讲,它是impossible to actually return the time this way,但打印起来并不难。

答案 1 :(得分:1)

您可以使用模块timeit

示例用法

import timeit

timeit.timeit('"-".join(str(n) for n in range(100))', number=10000)

Out[1]: 0.25778120000006766

使用python 3时,此代码运行良好。

您可以运行多个循环以确保任何可变性,并且当然可以用自己的oneliner替换''之间的代码。

可以在doc page上找到更多信息,以获取时间