python限制函数执行 允许python程序

python 递归限制

python不能无限的递归调用下去。并且当输入的值太大,递归次数太多时,python 都会报错

创新互联专注于企业成都全网营销、网站重做改版、南昌网站定制设计、自适应品牌网站建设、成都h5网站建设商城网站建设、集团公司官网建设、成都外贸网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为南昌等各大城市提供网站开发制作服务。

首先说结论,python解释器这么会限制递归次数,这么做为了避免"无限"调用导致的堆栈溢出。

tail recursion 就是指在程序最后一步执行递归。这种函数称为 tail recursion function。举个例子:

这个函数就是普通的递归函数,它在递归之后又进行了 乘 的操作。 这种普通递归,每一次递归调用都会重新推入一个调用堆栈。

把上述调用改成 tail recursion function

tail recursion 的好处是每一次都计算完,将结果传递给下一次调用,然后本次调用任务就结束了,不会参与到下一次的递归调用。这种情况下,只重复用到了一个堆栈。因此可以优化结构。就算是多次循环,也不会出现栈溢出的情况。这就是 tail recursion optimization 。

c和c++都有这种优化, python没有,所以限制了调用次数,就是为了防止无限递归造成的栈溢出。

如果递归次数过多,导致了开头的报错,可以使用 sys 包手动设置recursion的limit

手动放大 recursionlimit 限制:

python如何用for循环控制多次执行一个自定义函数?

#脚本里面直接这样写就好了

import random

def R():

print (random.randint(1,1000))

for i in range(1,10):

R()

python中如何限制输入次数

python 限制函数调用次数的实例讲解

发布时间:2018-04-21 09:58:18 作者:随便起个名字啊

下面小编就为大家分享一篇python 限制函数调用次数的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

如下代码,限制某个函数在某个时间段的调用次数,

灵感来源:python装饰器-限制函数调用次数的方法(10s调用一次) 欢迎访问

原博客中指定的是缓存,我这里换成限制访问次数,异曲同工

#newtest.py

#!/usr/bin/env python

#-*- coding:utf-8 -*-

import time

def stat_called_time(func):

cache={}

limit_times=[10]

def _called_time(*args,**kwargs):

key=func.__name__

if key in cache.keys():

[call_times,updatetime]=cache[key]

if time.time()-updatetime 60:

cache[key][0]+=1

else:

cache[key]=[1,time.time()]

else:

call_times=1

cache[key]=[call_times,time.time()]

print('调用次数: %s' % cache[key][0])

print('限制次数: %s' % limit_times[0])

if cache[key][0] = limit_times[0]:

res=func(*args,**kwargs)

cache[key][1] = time.time()

return res

else:

print("超过调用次数了")

return None

return _called_time

@stat_called_time

def foo():

print("I'm foo")

if __name__=='__main__':

for i in range(10):

foo()

#test.py

from newtest import foo

import time

for i in range(30):

foo()

print('*'*20)

foo()

foo()

print('*'*20)

for i in range(60):

print(i)

time.sleep(1)

for i in range(11):

foo()


当前题目:python限制函数执行 允许python程序
文章分享:http://hbruida.cn/article/hgposj.html