我有一個方法,我已經破碎成更小的嵌套函數,打破了代碼庫:呼叫嵌套函數在Python
def foo(x,y):
def do_this(x,y):
pass
def do_that(x,y):
pass
do_this(x,y)
do_that(x,y)
return
有沒有辦法通過自身運行的嵌套功能之一。例如:
foo.do_this(x,y)
編輯:
我想設置緩存的web服務器,我已經使用pyramid_breaker
def getThis(request):
def invalidate_data(getData,'long_term',search_term):
region_invalidate(getData,'long_term',search_term)
@cached_region('long_term')
def getData(search_term):
return response
search_term = request.matchdict['searchterm']
return getData(search_term)
這是我的理解可能不準確建立在:
現在我有這個的原因是裝飾器用來創建緩存鍵的命名空間是從函數生成的和爭論。因此,您不能只將getDevice放在getThis上,因爲請求變量是唯一的,並且緩存是無用的。所以我創建了具有可重複參數(search_term)的內部函數。
但是,爲了使緩存無效(即刷新),無效函數需要範圍知道'getData'函數,因此也需要嵌套。因此我需要調用嵌套函數。你們美好的人已經明確表明它不可能,所以有人能夠解釋我如何用不同的結構來做它?
代碼'foo.do_this'將嘗試訪問do_this作爲成員本功能離開'foo',它會給你一個屬性錯誤,而不是讓foo作爲類 – avasal
「分解代碼庫」是模塊名稱空間的優點。如果你真的想封裝do_函數,那麼使用class作爲@lazyr顯示。 – msw
嵌套函數不是在Python中構造代碼的方式(也不是類)。看看[modules](http://docs.python.org/tutorial/modules.html)。 – georg