• ~~函数基础(三):嵌套函数&匿名函数~~


    进击のpython

    *****

    嵌套函数&匿名函数


    讲完作用域之后

    对变量的作用范围有大致的了解了吗?

    讲个稍微小进阶的东西吧

    能够帮助你更加的理解全局和局部变量


    • 嵌套函数

      玩过俄罗斯套娃不?

      没玩过听过不?

      没听过?很好!我就喜欢你这种“大人物”

    从小的一点一点的往大了装,一个嵌套一个

    函数也可以这么玩~~~

    msg = "我是全局变量"
    
    
    def func():
        msg = "我是函数func的局部变量"
    
        def func1():
            msg = "我是函数func1的局部变量"
            print(msg)
    
        func1()
        print(msg)
        
    
    func()
    print(msg)
    

    结果是这个!能看懂不?

    看不懂的继续看,看懂的可以跳到匿名函数了!

    好,程序的执行步骤来了,现在来考考你吧

    如果程序变为这样呢?输出结果是什么?自己动手敲敲

    msg = "我是全局变量"
    
    
    def func():
        msg = "我是函数func的局部变量"
    
        def func1():
            # msg = "我是函数func1的局部变量"
            print(msg)
    
        func1()
        print(msg)
    
    
    func()
    print(msg)
    

    行了,这个想明白了,就差不多了(想不明白继续想!)

    谈下一话题了


    • 匿名函数

      啥叫匿名?不知道就是匿(ni 四声)名,对吧!(看,又学英语又学汉语的)

      在函数里,什么叫匿名呢?

      就是不给起名字!

      what???不给起名字???

      def ():
      

      这样????总觉得冥冥之中不对

      觉得不对就对了,因为这么写就不对

      先给个你熟悉的函数

      def calc(x, y):
          return x ** y
      
      
      print(calc(2, 5))
      

      能看明白吧,不执行了┗|`O′|┛ 嗷~~

      现在把他给整匿名了!

      那我们需要一个关键字来帮忙 lambda (都学多少关键字了?自己思考一下)

      lambda x, y: x ** y
      

      能看明白怎么变得不?看不明白就对比着写两遍!你就看出来了

      但是奥,有些人他就发现了问题

      我这要怎么调用???????

      还是要起个名字(所以我就觉得这个有点智障)

      func = lambda x, y: x ** y
      print(func(2, 5))
      

      有啥用呢?有个函数是这样的

      map(函数,可迭代对象)

      不用管什么是可迭代对象,这里可以放列表,懂吧

      这个函数的意思是把列表(可迭代对象)里的每一个值都拿出来执行一下前面的函数

      我们可以试试这个函数

      a = map(lambda x: x ** 2, [1, 2, 3, 4, 5])
      for i in a:
          print(i, end=" ")
      

    是吧,把列表里的每个数都进行二次方操作了

    别问为啥用循环打印,先记住!

    这样,匿名函数的稍微用途就出来了,你可以不用像原先一样

    先定义函数,再调用

    而是现写现用(依旧感觉鸡肋!)

    但是函数体只能写简单的,以及三元运算

    a = map(lambda x: x ** 2 if x < 4 else 0, [1, 2, 3, 4, 5])
    for i in a:
        print(i, end=" ")
    

    自己执行打印吧!


    *十分鸡肋*
    *可以装逼*
  • 相关阅读:
    BZOJ 2588
    BZOJ 3524
    BZOJ 3932
    Bzoj1013--Jsoi2008球形空间产生器
    Codevs1743--反转卡片
    Bzoj1208--Hnoi2004宠物收养所
    Bzoj1112--Poi2008砖块Klo
    后缀自动机学习笔记
    Bzoj1588--Hnoi2002营业额统计
    Bzoj1056--Haoi2008排名系统
  • 原文地址:https://www.cnblogs.com/jevious/p/11134180.html
Copyright © 2020-2023  润新知