鱼C论坛

 找回密码
 立即注册
查看: 1910|回复: 6

[已解决]关于21课第6题

[复制链接]
发表于 2020-10-29 16:54:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
原题如下:
        请目测以下表达式会打印什么?
        def make_repeat(n):
             return lambda s: s * n

        double = make_repeat(2)
        print(double(8))
        print(double('FishC'))  

输出结果如下:
        16
        FishCFishC

我的问题:

        完全不明白结果是怎么产生的?
        请有耐心、思路清晰、关爱小白人士解答,感谢~
最佳答案
2020-10-30 00:05:58
        def make_repeat(n):           #2.调用了这个函数,n=2
             return lambda s: s * n    #3.返回一个匿名函数:lambda s: s * 2

        double = make_repeat(2)  #1.传入参数n=2并调用函数,并将结果赋值给double。
#4.double赋值为匿名函数,匿名函数等价于:
#def ds(s):
#     return s*2


        print(double(8))      #5.把8作为参数,调用匿名函数,计算结果为16
        print(double('FishC'))  #6.把'FishC'作为参数,调用匿名函数,计算结果为'FishC''FishC'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-29 17:42:43 | 显示全部楼层
这里用到了闭包和匿名函数,如果不是很清楚再看看小甲鱼的视频。
如果不用匿名函数可以写成
def make_repeat(n):
    def fun(s):
        return s * n
    return fun
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-30 00:05:58 | 显示全部楼层    本楼为最佳答案   
        def make_repeat(n):           #2.调用了这个函数,n=2
             return lambda s: s * n    #3.返回一个匿名函数:lambda s: s * 2

        double = make_repeat(2)  #1.传入参数n=2并调用函数,并将结果赋值给double。
#4.double赋值为匿名函数,匿名函数等价于:
#def ds(s):
#     return s*2


        print(double(8))      #5.把8作为参数,调用匿名函数,计算结果为16
        print(double('FishC'))  #6.把'FishC'作为参数,调用匿名函数,计算结果为'FishC''FishC'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-10-30 01:41:01 | 显示全部楼层
应该是匿名函数比较复杂,
如果不用匿名函数可以写成:
def make_repeat(n):
    def double(s):
        return s * n
    return double

double = make_repeat(2)
print(double(8))
print(double('FishC'))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-30 09:02:57 | 显示全部楼层
笨鸟学飞 发表于 2020-10-30 00:05
def make_repeat(n):           #2.调用了这个函数,n=2
             return lambda s: s * n   ...

感谢各位大神,我理了一下思路。应该是我对于:
       print(double(9))
       print(double('Fishc'))
       以上行代码是如何把       “9”     和    "FicshC"    这两个实参传入子函数里面过程的疑惑。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-30 09:03:33 | 显示全部楼层
冬雪雪冬 发表于 2020-10-29 17:42
这里用到了闭包和匿名函数,如果不是很清楚再看看小甲鱼的视频。
如果不用匿名函数可以写成

感谢各位大神,我理了一下思路。应该是我对于:
       print(double(9))
       print(double('Fishc'))
       以上行代码是如何把       “9”     和    "FicshC"    这两个实参传入子函数里面过程的疑惑。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-30 09:04:09 | 显示全部楼层
笨鸟学飞 发表于 2020-10-30 00:05
def make_repeat(n):           #2.调用了这个函数,n=2
             return lambda s: s * n   ...

感谢各位大神,我理了一下思路。应该是我对于:
       print(double(9))
       print(double('Fishc'))
       以上行代码是如何把       “9”     和    "FicshC"    这两个实参传入子函数里面过程的疑惑。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 04:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表