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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值