python 限制函數(shù)調(diào)用次數(shù)的實例講解
成都創(chuàng)新互聯(lián)公司專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、網(wǎng)站設(shè)計、外貿(mào)營銷網(wǎng)站建設(shè)、右江網(wǎng)絡(luò)推廣、成都小程序開發(fā)、右江網(wǎng)絡(luò)營銷、右江企業(yè)策劃、右江品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;成都創(chuàng)新互聯(lián)公司為所有大學(xué)生創(chuàng)業(yè)者提供右江建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:www.rwnh.cn
發(fā)布時間:2018-04-21 09:58:18 作者:隨便起個名字啊
下面小編就為大家分享一篇python 限制函數(shù)調(diào)用次數(shù)的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
如下代碼,限制某個函數(shù)在某個時間段的調(diào)用次數(shù),
靈感來源:python裝飾器-限制函數(shù)調(diào)用次數(shù)的方法(10s調(diào)用一次) 歡迎訪問
原博客中指定的是緩存,我這里換成限制訪問次數(shù),異曲同工
#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('調(diào)用次數(shù): %s' % cache[key][0])
print('限制次數(shù): %s' % limit_times[0])
if cache[key][0] = limit_times[0]:
res=func(*args,**kwargs)
cache[key][1] = time.time()
return res
else:
print("超過調(diào)用次數(shù)了")
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中的 `int()` 函數(shù),它將給定的參數(shù)強制轉(zhuǎn)換為整數(shù)。比如 `int(x)`,其中 `x` 是可以是浮點數(shù)、字符串或布爾值的變量。
python不能無限的遞歸調(diào)用下去。并且當(dāng)輸入的值太大,遞歸次數(shù)太多時,python 都會報錯
首先說結(jié)論,python解釋器這么會限制遞歸次數(shù),這么做為了避免"無限"調(diào)用導(dǎo)致的堆棧溢出。
tail recursion 就是指在程序最后一步執(zhí)行遞歸。這種函數(shù)稱為 tail recursion function。舉個例子:
這個函數(shù)就是普通的遞歸函數(shù),它在遞歸之后又進行了 乘 的操作。 這種普通遞歸,每一次遞歸調(diào)用都會重新推入一個調(diào)用堆棧。
把上述調(diào)用改成 tail recursion function
tail recursion 的好處是每一次都計算完,將結(jié)果傳遞給下一次調(diào)用,然后本次調(diào)用任務(wù)就結(jié)束了,不會參與到下一次的遞歸調(diào)用。這種情況下,只重復(fù)用到了一個堆棧。因此可以優(yōu)化結(jié)構(gòu)。就算是多次循環(huán),也不會出現(xiàn)棧溢出的情況。這就是 tail recursion optimization 。
c和c++都有這種優(yōu)化, python沒有,所以限制了調(diào)用次數(shù),就是為了防止無限遞歸造成的棧溢出。
如果遞歸次數(shù)過多,導(dǎo)致了開頭的報錯,可以使用 sys 包手動設(shè)置recursion的limit
手動放大 recursionlimit 限制:
def hanshu(*a):
return a
print(hanshu(1,2))
輸出(1,2)
print(hanshu(1,2,3,4,5,6))
輸出(1,2,3,4,5,6)
print(hanshu('a','b','c'))
輸出('a','b','c')
注意:這里a會自動生成元組,不是列表。
文章題目:python函數(shù)限制 python限制輸入值范圍字母
文章鏈接:http://www.rwnh.cn/article42/dosiihc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、網(wǎng)站策劃、網(wǎng)站設(shè)計公司、關(guān)鍵詞優(yōu)化、App開發(fā)、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)