求助这个套娃和函数、return的用法
问题直接写在代码后面,求哪位高手帮忙解答下,十分感谢!!!
求求你了发代码不要发图片 def count():
fs = []
for i in range(1,4):
def f():
return i*i
fs.append(f)
return fs
f1, f2, f3 = count()
print(f1())
print(f2())
print(f3())
老八秘制 发表于 2020-4-22 21:58
求求你了发代码不要发图片
def count():
fs = []
for i in range(1,4):
def f():
return i*i
fs.append(f)
return fs
f1, f2, f3 = count()
print(f1())
print(f2())
print(f3())
————————————————
版权声明:本文为CSDN博主「redhatlxs」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liu1123055728/java/article/details/94454919 1.f是返回这个函数的地址,f()则是调用函数
2.对数组fs的末位添加一个f,原先是fs=[],添加后就是fs=,一个函数地址
3.返回的应该是f的调用结果
4.应该相当于让f1,f2,f3和count成为作用一样的函数
5、6.不太清楚,@zltzlt @qiuyouzhi
单独定义的话,f3 就是一个list,里面的元素类型是函数的地址,list是没法直接调用的,
最后输出9是因为在循环结束后才return fs,最后的i为3,输出3*3 老八秘制 发表于 2020-4-22 22:14
1.f是返回这个函数的地址,f()则是调用函数
2.对数组fs的末位添加一个f,原先是fs=[],添加后就是fs=, ...
谢谢,还有哈,函数的地址不是用来调用函数的吗,fs = ,还是说列表fs存放的是函数f地址,类似于fs = ,fs.append(f)执行后,fs变成了什么,经过for循环后,fs又变成了啥
剩下的问题明白了,谢谢! 失文 发表于 2020-4-22 22:34
谢谢,还有哈,函数的地址不是用来调用函数的吗,fs = ,还是说列表fs存放的是函数f地址,类似于fs =...
我要睡觉了,明天我看看能不能解决 jkluoling1992 发表于 2020-4-22 22:30
单独定义的话,f3 就是一个list,里面的元素类型是函数的地址,list是没法直接调用的,
最后输出9是因为在 ...
万分感谢!
1、也就是说count()函数执行完后是一个list类型,f1,f2,f3 = count()这样赋值后,f1,f2,f3都变成了count(),但是在python中不直接显示为列表形式,而是和range()一样的吗?
2、函数的地址具体是个啥东西。。。
3、最后为啥输出的不是列表的形式,而只是返回了最后一次9的值,x.append(f),不就是给x[]中添加1,4,9吗
本帖最后由 jkluoling1992 于 2020-4-22 23:53 编辑
失文 发表于 2020-4-22 23:11
万分感谢!
1、也就是说count()函数执行完后是一个list类型,f1,f2,f3 = count()这样赋值后,f1,f2,f3都 ...
1 count()调用完返回一个list 列表,里面放了三个函数名,就像f1,f2,f3 = , f1 = fun1, f2 = fun2, f3 =fun3,
2 函数名加()就是函数调用了,函数的地址你就理解为函数名吧
3 当return fs 时,已经是for循环结束时调用了f函数,此时i=3 ,return f 就是 return i*i ,三次for循环只return一次,所以不会出现1,4,9,,只有9
jkluoling1992 发表于 2020-4-22 23:52
1 count()调用完返回一个list 列表,里面放了三个函数名,就像f1,f2,f3 = , f1 =...
那按照你讲的,既然count()函数的值就是return fs返回的存放了三个函数名的列表,那说明fs列表在for循环中就已经增加了元素,由[]变成,那最后打印时又怎么会只出现一个9 1. f 是函数的地址,f() 是函数的返回值,不懂就复习一下
2. print(fs) 是因为你用 fs.append(f) 将函数的地址添加了进去,参考 1. 理解一下
3. fs 是在函数内定义的列表,和 3. print(fs) 的内容相同
4. f1, f2, f3 = count() 等价于 f1 = count();f2 = count();f3 = count()
5. 单独 f3 = count() 不会报错 失文 发表于 2020-4-23 00:53
那按照你讲的,既然count()函数的值就是return fs返回的存放了三个函数名的列表,那说明fs列表在for循环 ...
def count():
fs = []
for i in range(1,4):
def f():
print(i)
return i*i
fs.append(f)
return fs
单步调试,你看看调用f1()的时候,i打印出来是几,,这个函数f 进了几次 失文 发表于 2020-4-22 23:11
万分感谢!
1、也就是说count()函数执行完后是一个list类型,f1,f2,f3 = count()这样赋值后,f1,f2,f3都 ...
帮你改了一下:
def count():
fs =
return fs
也可以传入参数:
def count(stop):
fs =
return fs jkluoling1992 发表于 2020-4-23 09:19
def count():
fs = []
for i in range(1,4):
大佬,函数不是这么运行的吗:
for 第一次循环 → fs.append(f) → 调用fs,return i * i,→ fs末尾添加了f函数,第二次、第三次循环同理,fs列表最后应该是类似于这种形式的吧,那打印出来不应该是这样吗。为啥只返回3def count():
fs = []
for i in range(1,4):
def f():
print('this is i:',i) # i 打印了3次,但都是3,而且为啥不是最先打印出来的?
return i*i
fs.append(f)
print('this is fs:',fs) # 这个打印是函数名的列表,最先打印出来的
return fs
f1,f2,f3 = count()
print(f1(),f2(),f3()) # 9 9 9
_2_ 发表于 2020-4-23 09:09
1. f 是函数的地址,f() 是函数的返回值,不懂就复习一下
2. print(fs) 是因为你用 fs.append(f) 将函数的 ...
f1,f2,f3 = count(),根据我测试的结果,只要等号左边的变量数量和等号右边列表(这里指的是count(),但是type(count()) 是个列表)的元素数量,就不会报错,反之报错,测试 f3 = count(),也会报错 失文 发表于 2020-4-23 13:33
大佬,函数不是这么运行的吗:
for 第一次循环 → fs.append(f) → 调用fs,return i * i,→ fs末尾添 ...
打印的是i,f返回的是i*i,下次问之前思考一下 失文 发表于 2020-4-23 13:42
f1,f2,f3 = count(),根据我测试的结果,只要等号左边的变量数量和等号右边列表(这里指的是count(),但 ...
f3 = count() 不可能报错 本帖最后由 jkluoling1992 于 2020-4-23 13:57 编辑
永恒的蓝色梦想 发表于 2020-4-23 13:53
f3 = count() 不可能报错
他说的是这种情况下,f3()会报错,单纯的赋值,f3就是一个list,不会错 jkluoling1992 发表于 2020-4-23 13:55
他说的是这种情况下,f3()会报错
哦,明白了
页:
[1]
2