python基础语法day12

day12学习总结

1. 返回值
  • 函数的返回值
    • 返回值就是从函数内容传递到函数外部的数据(python中的每个函数都可以传递一个数据到函数的外部)

    • 怎么确定一个函数的返回值:return后面的值就是函数的返回值(执行函数体的如果是遇到return,return后面的值就是函数的返回值)

    • 怎么在函数外部获取函数返回值

      • 获取函数调用表达式的值就是获取这个函数的返回值

      • 函数调用表达式 - 调用函数的语句

      • 函数调用表达式的值就是函数的返回值,所有返回值能干的事,函数调用表达式都可以做。

        def func1(a,b):
            result = a + b
            return result  # return后面放需要返回的数据
        func1(20,30) 
        print(func1(10,20)) # 30
        print(func1(10,20)*3)  # 90
        
    • 什么时候使用返回值

      • 如果实现函数的功能,产生了新的数据,就将新的数据作为函数的返回值返回。
    • 注意

      1. return后面放需要返回的数据。

      2. 一个函数只有一个返回值(一个函数最多只能有一个return有效);如果想要把多个数据作为函数的返回值返回,可以在一个return后面写多个数据

      3. return除了可以返回数据,还会提前结束函数(执行函数体的时候如果遇到return,函数直接结束)

      def func2(a,b):
          result1 = a + b
          result2 = a * b
          return result1,result2  # 相当于返回了一个元组
      s1,s2 = func2(4,5)
      print(s1,s2)  # 9 20
      
      # return除了可以返回数据,还会提前结束函数(执行函数体的时候如果遇到return,函数直接结束)
      def func3():
          print("----") #打印
          print("++++") #打印
          return
          print("****") # 不打印
      func3()
      
2. 变量作用域
  • 全局变量和局部变量

    1. 全局变量:没有定义在函数里面或者类里面的变量都是全局变量

      • 作用域:从定义开始,到程序结束(程序结束前的任何位置都可以使用)
    2. 局部变量:定义在函数中的变量就是局部变量(定义在类中的变量是属性)

      • 作用域:从定义开始到函数结束(形参也是局部变量)
      for x in range(3):
          b = 5  # x和b是全局变量
      
      def func1(c):
          d = 30
          print(f"函数里面c和d:{c}{d}")  # c和d是局部变量
      func1(5)
      print(c,d) # 报错, 函数外不能用局部变量
      
  • 不同变量的存储方式

    • 全局变量默认保存在全局栈区间(程序结束的时候才会释放)

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-j1IKJLSU-1659455304806)(C:\Users\wuson\AppData\Roaming\Typora\typora-user-images\image-20220802184747925.png)]

    • 局部变量默认保存在函数对应的临时栈区间中(函数对应的临时栈区间,创建函数的时候会创建出来,函数调用结束后会自动释放)

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uBjA83yN-1659455304809)(C:\Users\wuson\AppData\Roaming\Typora\typora-user-images\image-20220802184913658.png)]

  • global

    • 在定义变量前加global关键字,可以让函数中定义变量可以保存在全局栈
      区间

      name = "小明"
      def change_name():
          global name
          name = "小红"
          print(f"函数里面的:{name}")
      change_name()
      print(f"函数外面的:{name}")
      
3. 实参高阶函数
  • 定义:函数的参数就是函数

    def func7(x):  # x = temp
        print(x(10)+20)  # x(10) == temp(10)返回值19,+20,=39
    def temp(m):
        return 19
    func7(temp) # 39
    
  • 两种传参方法:

    1. 使用普通函数的函数名
    2. 使用匿名函数
  • 匿名函数

    • 语法 :

      语法   -   函数名 = lambda 形参列表:返回值
      相当于:   def 函数名(形参列表):
                    return 返回值
                      
      # 本质:还是函数,但是它只能实现简单的功能(一行语句就能实现它的功能)
      
  • 匿名函数的应用

    • 在给实参高阶函数传参的时候,可以使用的范围普通函数函数名,也可以使用匿名函数(能用匿名函数就是用匿名函数,不行才用普通函数)

      def func2(x):
          print(x(10,20)+10)
      func2(lambda m,n:12.3) # 22.3
      
4. 常用的实参高阶函数
  • max,min,sorted

    • 语法1: max/min/sorted(序列) - 直接比较序列中元素本身的大小,求出最大(小,)值或者排序

    • 语法2: max/min/sorted(序列,key=函数) - 按照函数指定的比较规则比较元素的大小,求出最大(小)值或者排序

    • 函数的要求:

      1. 有且只有一个参数(这个参数代表序列中的每个元素)
      2. 需要一个返回值(返回值是比较对象 - 将参数看成元素,在这个地方来描述比较对象和元素之间的关系。)
      # 求nums中值最大的元素
      nums = [18,32,45,75,74,35]
      result = max(nums,key=lambda item:item)
      print(result) # 75
      
      # 求nums中各个位数之和最大的元素
      nums = [102, 19, 48, 221, 52]
      result4 = max(nums,key=lambda item:sum([int(x) for x in str(item)]))
      print(result4) # 48
      
  • map

    • 语法1:map(函数,序列) - 根据函数指定的规则,将指定序列中的元素转换成新序列中的元素

      • 函数的要求:

        1. 有且只有一个参数(代表后面序列中的元素)

        2. 有返回值(返回对应的就是新序列中的元素)

    • 语法2: map(函数,序列1,序列2,…)

      • 函数的要求:
        1. 有且只有N个参数(代表后面N个序列中的元素)
        2. 有返回值(返回对应的就是新序列中的元素)
      # 将nums中所有的元素乘以10
      nums = [82, 67, 89, 6617, 90, 23, 71]
      result8 = map(lambda item:item * 10,nums)
      print(list(result8)) # [820, 670, 890, 66170, 900, 230, 710]
      
      # 基于scores创建一个列表,列表中元素根据nums中元素确定为'及格'或者'不及格'
      scores = [82, 67, 89, 66, 90, 23, 71]
      result9 = map(lambda item:"及格" if item>=60 else "不及格",scores)
      print(list(result9)) # ['及格', '及格', '及格', '及格', '不及格', '及格']
      
  • reduce

    • reduce - 将序列中所有的元素通过指定的规则合并成一个数据

    • 注意:reduce使用之前需要先导入

    • 语法:reduce(函数,序列,默认值)

      • 函数的要求:

        1. 有且只有两个参数(第一个参数指向默认值,第二个参数指向序列中的每个元素)
        2. 需要一个返回值(描述合并方式,说清楚最后的结果是初始值和序列中元素进行什么样的操作得到的)
        # 求nums中所有的元素的和
        nums = [10,20,30,40]
        result11 = reduce(lambda i,item:i+item,nums,0)
        print(result11)  # 100
        
        # 将nums1中的所有数字合并到一起
        nums1 = [10,20,30,40]
        result12 = reduce(lambda i,item:i+str(item),nums1,"")
        print(result12)
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值