function函数

函数缓存 (Function caching)

半腔热情 提交于 2019-11-29 02:42:21
函数返回值缓存是优化一个函数的常用手段。我们可以将函数、输入参数、返回值全部保存起来,当下次以同样的参数调用这个函数时,直接使用存储的结果作为返回(不需要重新计算)。 函数缓存允许我们将一个函数对于给定参数的返回值缓存起来。当一个I/O密集的函数被频繁使用相同的参数调用的时候,函数缓存可以节约时间。 Python 3.2及以后版本 我们来实现一个斐波那契计算器,并使用lru_cache。 from functools import lru_cache @lru_cache(maxsize=32) def fib(n): if n < 2: return n return fib(n-1) + fib(n-2) >>> print([fib(n) for n in range(10)]) # Output: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34] # 我们也可以轻松地对返回值清空缓存,通过这样: fib.cache_clear() 那个maxsize参数是告诉lru_cache,最多缓存最近多少个返回值。 functools模块和cachetools模块都提供了类似的缓存机制。 functools提供了 lru_cache ,如果缓存数据超出参数 maxsize 的值,就用LRU(最少最近使用算法)清除最近很少使用过的缓存结果

从function前面的!想到的

只谈情不闲聊 提交于 2019-11-28 19:48:55
最近没事喜欢看看,一些js库的源码,结果发现库前不是加一个!就是加+或者一个(),心中猜出个大概知道这个是让函数自动执行,可是这么多符号达到同一个目的,原理是什么呢,下面做一下剖析: 先从IIFE开始介绍 IIFE(Imdiately Invoked Function Expression 立即执行的函数表达式) function (){ alert( 'IIFE' ); } 把这个代码放在console中执行会报错 因为这个是一个匿名函数,要想让它正常运行就必须给个函数名,然后通过函数名调用。 好了这下知道为啥我们看到很多类库写的时候也是匿名函数结果不报错了吧,就是因为这些前面加的符号的原因。 其实在匿名函数前面加上这些符号后, 就把一个函数声明语句变成了一个函数表达式,是表达式就会在script标签中自动执行。 运算符 ①为什么加上了这些运算符后就能让一个匿名函数变成一个不会报错的函数表达式呢? 我们自然会想到javascript的解析器到底是怎么工作识别的呢,js解析器执行js表达式这个肯定是没有问题的。其实无论是括号,还是感叹号,让整个语句合法做的事情只有一件,就是 让一个函数声明语句变成了一个表达式 。所以我们让一个函数定义变成一个函数表达式来执行就不会报错。 ②原理 这样是一个函数声明 function a(){ alert( 'IIFE' ); } 这样是一个函数调用

differences between the function parameters of const int & a and int a

流过昼夜 提交于 2019-11-26 16:02:39
Const int & a 与 int a在作函数参数时的区别: 当int a 作函数参数时,在函数实现时,是先将实参的值传递给形参a,然后通过形参a进行函数的实现。 而当是const int & a 作函数参数时,在函数实现时,是直接拿实参来进行函数的实现,但又由于参数由const修饰符修饰,故在函数实现时a的值不能改变。 总之,这两个做参数,都不会改变实参的值。但由于前者少了一个传参的过程,并且不用创建临时变量(在编译时编译器会为形参开辟内存,存放在栈区),故相对于后者其更加节省时间和空间。 来源: https://blog.csdn.net/qq_27577651/article/details/98852073