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