python函数内的作用域包括什么_python菜鸟求问关于嵌套函数中作用域范围应该怎么理解?...
直接上代碼
def l(list):
def d():
return list
return d
#運行
l = l([1,2,3,4])
print l()
這個情況是正常的。
問題在于d函數為什么不能傳入list,然后我現在嘗試了一下這個代碼:
def l(list):
def d(list):
return list
return d
#運行
l = l([1,2,3,4])
#提示錯誤
print l()
#正常
print l([1,3,5,7,9])
請問這個怎么解釋呢?
我個人理解的是,類似于“繼承”的情況,當d函數沒有參數傳入的情況上,基于父函數的參數,當他需要傳參了,就覆蓋了???
運行
l = l([1,2,3,4])
提示錯誤
print l() 這個錯誤是你沒有傳參數。
樓主需要理解的是: 作用域
case 1: 函數l返回函數d的地址,d只做為返回值,并沒有被調用執行.In [3]: print(l([1,2,3,4]))
.d at 0x7f49243ece18>
參數list傳入l,作用域在函數l內,可以被d訪問(注意參數是傳給l的,不是d).
如果要訪問list.如下調用:
`In [2]: print(l([1,2,3,4])())
[1, 2, 3, 4]相當于:In [5]: d = l([1,2,3,4]) # 返回d的地址
In [6]: d() #調用d,d沒有參數,不需要傳參
Out[6]: [1, 2, 3, 4]case 2: 同樣l返回d的地址,但此時返回的函數d需要傳參(注意l的參數list和d的參數list是不一樣的).In [8]: d = l([1,2,3,4]) # 返回函數d的地址,參數list此時并沒有用到
In [9]: d([5,6,7,8]) # 需要參數的函數d
Out[9]: [5, 6, 7, 8]
原有代碼中:def l(list):
def d(list):
return list
return d #
#運行
l = l([1,2,3,4])
#提示錯誤
print l() #
#正常
print l([1,3,5,7,9]) #
下面的用于說明:你原來代碼中的 l 指向不同:def l(list):
def d(list):
return list
return d
#運行
print 'id(l) is {}'.format(id(l))
l = l([1,2,3,4])
#提示錯誤
# print l()
#正常
print 'id(l) is {}'.format(id(l))
print l([1,3,5,7,9])
代碼寫成這樣你可能就理解了:def l(_list):
def d(_l):
return _list + _l
return d
a = l([1,2,3,4])
print a([1])
最后說兩點:
玩蛇網文章,轉載請注明出處和文章網址:https://www.iplaypy.com/wenda/wd13874.html
相關文章 Recommend
總結
以上是生活随笔為你收集整理的python函数内的作用域包括什么_python菜鸟求问关于嵌套函数中作用域范围应该怎么理解?...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自动摘要php,phpcms修改手动摘要
- 下一篇: python问题解决了吗_Python