spacex_dragon 发表于 2020-10-29 16:54:34

关于21课第6题

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

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

输出结果如下:
        16
        FishCFishC

我的问题:

        完全不明白结果是怎么产生的?
        请有耐心、思路清晰、关爱小白人士解答,感谢~

冬雪雪冬 发表于 2020-10-29 17:42:43

这里用到了闭包和匿名函数,如果不是很清楚再看看小甲鱼的视频。
如果不用匿名函数可以写成
def make_repeat(n):
    def fun(s):
      return s * n
    return fun

笨鸟学飞 发表于 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'

dw_0123 发表于 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'))

spacex_dragon 发表于 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"    这两个实参传入子函数里面过程的疑惑。

spacex_dragon 发表于 2020-10-30 09:03:33

冬雪雪冬 发表于 2020-10-29 17:42
这里用到了闭包和匿名函数,如果不是很清楚再看看小甲鱼的视频。
如果不用匿名函数可以写成

感谢各位大神,我理了一下思路。应该是我对于:
       print(double(9))
       print(double('Fishc'))
       以上行代码是如何把       “9”   和    "FicshC"    这两个实参传入子函数里面过程的疑惑。

spacex_dragon 发表于 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"    这两个实参传入子函数里面过程的疑惑。
页: [1]
查看完整版本: 关于21课第6题