刚学python求解一个问题
天蓬老师
天蓬老师 2017-04-18 09:17:57
[Python讨论组]
def count():
    fs = []
    for i in range(1, 4):
        def f(j):  
                return j*j
        r=f(i)
        fs.append(r)
    return fs

这里定义了一个函数count()

def count1():
    fs = []
    for i in range(1, 4):
        def f(j):
            def g():
                return j*j
            return g
        r=f(i)
        fs.append(r)
    return fs

这里定义了一个count1()

这两个函数有区别么?

我在调用的时候发现count()和count1()结果一样,但是

f1, f2, f3 = count()
print f1(), f2(), f3()

通过这样调用的话count1()正常 count()却报错是为什么

Traceback (most recent call last):
  File "C:/Users/amos/PycharmProjects/untitled/1.py", line 10, in <module>
    print f1(), f2(), f3()
TypeError: 'int' object is not callable
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
伊谢尔伦

如果分别print两个函数,它们的结果是不一样的:

[1, 4, 9]
[<function g at 0x01B49F30>, <function g at 0x01B49EF0>, <function g at 0x01B49F70>]

count()返回的是一个带有3个数字的list,也就是函数中fs这个对象里append3个数字。
count1()则是3个函数。
为什么?

注意你的count1()里有一句return g,它直接returng这个函数对象本身,而不是g的执行结果。
return g改成return g(),则count1()的返回结果就和count()一样了。

至于你报错的问题,按照我上面说的改后,count1()也同样会报错,因为你的f1, f2, f3获取的三个结果都是int,所以不能加个括号像方法一样直接调用。

大家讲道理

count返回的是数值,count1返回的是函数引用。报错说得很明显,数值int是没办法调用的

PHP中文网
def count():
    fs = []
    for i in range(1, 4):
        def f(j):
                return j*j
        r=f(i) #调用函数,直接得到结果, r为一个整型数
        fs.append(r) #把结果放入list
    return fs

def count1():
    fs = []
    for i in range(1, 4):
        def f(j):
            def g():  #又定义了一个函数
                return j*j
            return g #返回一个函数,f就是一个高阶函数
        r=f(i) #因为f函数调用后返回一个函数,所以r还是一个函数
        fs.append(r)
    return fs

f1, f2, f3 = count()
g1, g2, g3 = count1()

#打印类型
print type(f1),f1,f2,f3

print type(g1),g1(),g2(),g3()
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号