创建多个小函数会减慢处理时间吗?
我正在使用Google App Engine环境,编程语言是Python。我正在创建一个函数,主要是生成一个随机的数字或字母字符串,然后把它存储到缓存中。
def generate_random_string():
# return a random 6-digit long string
def check_and_store_to_memcache():
randomstring = generate_random_string()
#check against memcache
#if ok, then store key value with another value
#if not ok, run generate_random_string() again and check again.
如果我创建两个小函数,而不是一个大函数,会影响性能吗?我更喜欢用两个函数,因为这样更符合我的思维方式,但如果合并成一个是“最佳实践”,我也不介意。
4 个回答
4
Reed说得对。你考虑的这个变化,调用一个函数的成本其实很低,只有少量的计算周期。你需要每秒调用大约10亿次,才能感觉到这个成本。
不过,我要提醒的是,有时候人们会走向另一个极端,这样一来,函数调用就显得很贵了。我见过一些设计过于复杂的系统,里面有很多层的抽象。
这种情况的发生是因为人们心理上觉得,如果某个东西很容易调用,那它就一定很快。这就导致写了比实际需要更多的函数调用,而当这种情况发生在多个抽象层时,浪费就可能是成倍增加的。
以Reed的驾驶例子为例,调用一个函数就像是绕道而行。如果这个绕道里还有其他的绕道,而那些绕道里又有绕道,最终就会浪费大量的时间,而这一切看起来都没有什么明显的理由,因为每个函数调用看起来都很无辜。
24
在几乎所有情况下,把函数“内联”以提高速度,就像为了减肥去理发一样。
38
重点是要让你的代码容易读懂和理解。
一旦你做到这一点,如果你遇到性能问题,再去看看是什么原因造成的。
大多数编程语言,包括Python,调用方法时的开销都比较小。把这些代码放到一个函数里并不会显著改变性能指标——我猜你的随机数生成可能占用了大部分时间,而不是因为有两个函数。
不过,分开函数确实会对性能有一点(非常非常小的)影响。但是我觉得可以这样理解——这就像你在高速公路上从80英里每小时降到79.99英里每小时(你根本不会注意到)。更重要的是要注意避免红绿灯和交通堵塞,因为那会让你完全停下来……