函数的返回值 和传参

函数

自定义函数的原因

避免代码冗余,提高可读性和扩展性

返回值

注意

  • a.如果函数有返回值,还应该定义“变量”接收返回值 b.如果返回值有多个,也可以用多个变量来接收,变量数应和返回值数目一致

没有返回值

  • 不写return,只写return,return None 都是返回None

返回一个值

  • return后面写上要返回的内容即可 注意:return和返回值之间要有空格,可以返回任意数据类型的值

    def my_len():
        """计算s1的长度"""
        s1 = 'hello world'
        length = 0
        for i in s1:
            length +=1
        return length
    # 函数调用
    str_len = my_len()
    print('str_len : %s'%str_len)\
    

      

    # 执行结果
    str_len : 11

返回多个值

  • 返回的多个值会被组织成元组被返回,也可以用多个值来接收 原因:python中把用逗号分割的多个值就认为是一个元组

    def ret_dome1():
    return 1,2,3
    # 调用函数
    ret1 = ret_dome1()
    print('用一个变量接收',ret1)
    a,b,c = ret1
    print('用多个变量接收',a,b,c)

      

    # 执行结果
    用一个变量接收 (1, 2, 3)
    用多个变量接收 1 2 3

函数的参数

传参方式

  • 实参

    • 位置传参

      • 就是按照位置一一对应

        def mymax(x,y):
            # 此时x=10,y=20
            the_max = x if x > y else y
            return the_max
        # 调用函数
        m = mymax(10,20)
        print(m)
        

          

        # 执行结果
        20
    • 关键字传参

      • 类似于变量赋值的形式 传参

        def mymax(x,y):
            print(x,y)
            the_max = x if x >y else y
            return the_max
        # 调用函数
        m = mymax(y=10,x=20)
        print(m)
        

          

        # 执行结果
        20 10
        20
    • 位置、关键字混合方式传参

      • a.位置参数必须在关键字参数的前面

      • b.对于一个形参只能赋值一次 

        def mymax(x,y):
            print(x,y)
            the_max = x if x >y else y
            return the_max
        #调用函数
        m = mymax(10,y=20)
        print(m)
        

          

        # 执行结果
        10 20
        20
  • 形参

    • 定义函数时用来接收的

    • 位置参数

      • 位置参数必须传值,不传值报错

    • 默认参数

      • 为什么要有默认参数:将变化频率比较小的值设置成默认参数

        def stu_info(name,gender='male'):
            """
            打印学生信息函数,由于班里大部分都是男生
            所以设置默认参数gender默认值为‘male’
            """
            print(name,gender)
        # 调用函数
        stu_info('Tom')
        stu_info('Jerry','female')
        

          

        # 执行结果
        Tom male
        Jerry female
      • 注意参数陷阱:默认参数不是默认不可变,只是一个初始值,它是一个‘可变’数据类型

        def default_param(a,l=[]):
            l.append(a)
            print(l)
        #调用函数
        default_param('Tom')
        default_param('Jerry')
        

          

        # 执行结果
        ['Tom']
        ['Tom', 'Jerry']
    • 动态参数

      • *args

        • 按位置传值多余的参数都由args统一接收,保存成一个元组的形式

          def mysum(a,*args):
              the_sum = 0
              for i in args:
                  the_sum +=1
              print(a)
              return the_sum
          # 调用函数
          the_sum = mysum(3,2,1)
          # 这个the_sum跟函数内的互不干扰
          print(the_sum)
          

            

          # 执行结果
          3
          2
      • **kwargs

      •   按关键字传值多余的参数都由args统一接收,保存成一个字典的形式

        def stu_info(**kwargs):
            print(kwargs)
            print(kwargs['name'],kwargs['gender'])
        # 调用函数
        stu_info(name='Tom',gender='male')
        

          

        # 执行结果
        {'name': 'Tom', 'gender': 'male'}
        Tom male
        

posted @ 2019-07-09 16:31  不在一城  阅读(436)  评论(0编辑  收藏  举报