#为什么print(make_list()(20))和print(make_list()(30))是调用了两次make_list()函数,averagae=make_list(),这个用赋值产数调用函数,是由于只调用了一次make_list函数嘛?所以列表可以叠加?
def make_list():
new=[]
def average(a):
new.append(a)
print(new)
return sum(new)/len(new)
return average
average=make_list()
print(make_list()(20))
print(make_list()(30))#调用两次make_list函数,每次调用都在重新分配内存空间
print
print(id(average))
print(average(20))
print(average(30))#average是make_list()对象赋值,即只掉用一次make_list函数
闭包函数调用问题?关于调用出来为什么产数不同?
- 写回答
- 好问题 提建议
- 追加酬金
- 关注问题
微信扫一扫
分享- 邀请回答
1条回答 默认 最新
- 关注
码龄 粉丝数 原力等级 --
- 被采纳
- 被点赞
- 采纳率
vigiles 2021-07-28 00:26最佳回答 专家已采纳你的注释 理解是对的,但实际的执行结果略有出入,尽管执行结果无差异。主要在‘new’的定义上。
# python3代码 def make_list(): new = list() # new = [] # print(make_list()(60)) 多次调用返回的id 相同 print(id(new)) def average(a): new.append(a) print(new) return sum(new)/len(new) return average print(make_list()(60)) # 每次 调用外层函数make_list,都会 新建列表‘new’, print(make_list()(70)) # 然后执行内部average,操作的都是空的'new'。添加,打印,计算 ml1 = make_list() ml2 = make_list() print(ml1(20)) # 每次 调用外层函数make_list,都会 新建列表‘new’, print(ml1(30)) # 然后执行内部average,操作的都是空的'new'。添加,打印,计算 print() average = make_list() # 仅调用一次外层函数,初始化一个列表 'new',返回闭包 print(id(average), average(20)) # 调用闭包,使用已有的'new' print(id(average), average(30)) # 调用闭包,使用已有的'new'
采纳该答案 已采纳该答案 专家已采纳评论解决 无用打赏举报微信扫一扫
分享评论登录 后可回复...
报告相同问题?
提交
相关推荐 更多相似问题
- 2015-03-13 09:39回答 1 已采纳 可以,直接使用就可以了。
- 2020-04-04 12:26回答 2 已采纳 showcount()函数属于非静态成员函数,非静态成员函数中有一个默认参数为this指针,指向本对象,所以非静态成员函数需要通过对象调用,不能通过类名。 而静态成员函数参数中没有this指针,可以
- 2017-07-21 03:05回答 2 已采纳 你没搞清楚jquery,$("xxx").click中函数的this指向当前点击的dom对象,不是showInfo的主调对象的实例,要用一个变量存储showInfo的主调对象实例 `
- 2022-01-27 08:00蜜糖的代码注释的博客 什么是闭包 闭包的英文对应的是Closure,如果要单纯的讨论这个概念的话就要提到和图灵机起名的大名鼎鼎的lambda演算(lamdba calculus)。尽管lamdba的概念并不是本文的重点,但是闭包概念的目的便是支持lamdba的实现...
- 2022-01-10 21:38happylifeng的博客 变量赋值;函数参数; 先看二个段闭包代码: $example = function () { var_dump($message); }; $message = 'hello'; $example = function () use ($message) { var_dump($message); };
- 2022-01-04 16:12飘过的倦的博客 首先这是go语言的一个闭包函数,在闭包函数中的变量会随着闭包函数一起被存放在内存中,因此在复制的时候,实际是将函数和变量一起加载到了内存中,即base这个变量其实已经储存在了内存中,如果return 函数对base...
- 2016-03-24 12:59回答 1 已采纳 原来没错原来没错没错
- 2020-04-05 14:36回答 2 已采纳 多种方式: 1.既然是jsp,那么你可以使用okhttp、httpclient、httptemplete等相关的工具包直接请求后端接口(使用okhttp访问接口) 2.如果你稍微懂点js(不懂也没
- 2015-12-26 13:45回答 3 已采纳 第二个方法,交换的结果是不是和原来一样呢,其实是因为你没有理解指针~第二个方法换来换去都没有真正的交换数据,只是把指针所指向的位置换了,即p1和p2分别指向了对方的位置,而在内存中,原本的数据顺序并没
- 2021-01-30 05:33weixin_39623805的博客 看了一下视频中对于闭包作用的解释我还是表示不明白,比如说截图中这段代码完全可以在cmp函数中加一个passline参数来实现,没必要使用闭包。谁能举一个更加好的例子说明闭包的作用啊?回答延长局部变量的生命周期,...
- 2019-02-22 10:24暴走的后端的博客 闭包(closure)是javascript的一大难点,也是它的特色。很多高级应用都要依靠闭包来实现。 1、变量作用域 要理解闭包,首先要理解javascript的特殊的变量作用域。 变量的作用域无非就两种:全局变量和局部变量。...
- 2021-01-21 23:18YY迪迪的博客 一、有名函数和匿名函数 函数变量类型初始值为nil。函数字面量类型的语法表达格式是 func (InputTypeList) OutputTypeList //无参函数 func fun() { } var f func()//无入参无返回值的函数对象声明,初始值为nil f ...
- 2018-10-08 13:07回答 1 已采纳 首先,你的变量定义放错位置了,编译都是通不过的,c和i定义应该放在begin前 如下: ``` create or replace function myfun(x number) retu
- 2020-04-15 11:09回答 1 已采纳 你这是父类调子类的方法,需要强转 FragmentManager fragmentManager= (MainActivity)context.getSupportFragmentManager();
- 2016-03-27 22:19回答 1 已采纳 全局类会调用析构函数,但是你在控制台看不到输出,这是因为调用的时机,此时程序已经和控制台分离了。 为了证明它的确被执行了,你可以下一个断点,调试执行,那么会看到程序确实停在了析构函数上。
- 2022-01-16 19:03卡拉比丘流形的博客 概念:内函数使用了外函数的局部变量,并且外函数把内函数返回出来的过程叫做闭包,这个内函数叫做闭包函数。 本质:相对于面向对象的“封装”,闭包可以理解为是函数式编程中的“封装”。 闭包函数的语法 2.闭包...
- 2021-12-25 21:59杰森斯坦森1150的博客 一、闭包函数的概念 闭包 = 一个函数 + 外部封闭的作用域 闭包函数的特征: ...# 调用闭包函数 返回的结果就是一个闭包 # 闭包 = 一个函数 + 外部封闭作用域 # 封闭作用域的值在外面是没有办法进行修
- 2022-01-20 17:54九幽帝君的博客 python闭包函数&装饰器
- 2015-08-26 11:08回答 3 已采纳 这是一件事情的两个说法,函数类型作函数参数,就是把函数作为参数传进去,既可以传匿名函数,也可以传别的函数。 闭包特指匿名函数中,可以访问外侧函数的变量。 这段代码没有特殊含义,只是为了演示下这种语
- 2022-02-14 10:59李响Superb的博客 那么,一般在什么情况下使用嵌套函数? 封装 - 数据隐藏 贯彻 DRY 原则 闭包 除此之外,嵌套函数还有其他用法,只不过这些是比较常用的。另外,闭包的内容较为丰富,后面做单独分享。 封装 - 数据隐藏 可以使用内...
- 没有解决我的问题, 去提问