函数1

一、函数的使用

  1. 定义

    def 函数名(param1、param2……):
       """
       :param1:参数1
       :param2:参数2
       :return:返回值
       """
       code 1
       code 2
       code 3
       ...
       return 返回值
    

    函数在定义阶段只检测语法,不会报错

  2. 调用

    函数名(param1, param2)
    

二、定义函数的三种形式

  1. 无参函数

    def func():
        print('hello byx')
        
    func()  # hello byx
    
  2. 有参函数

    def sum_self(x, y):
        """求和"""
        res = x+y
        print(res)
    
    sum_self(1,2)  # 3
    
  3. 空函数

    def func():
        pass
    

三、函数的返回值的特点

  1. return是一个函数结束的标志,函数内可以由多个return,只要执行到return,函数就会结束。
  2. return的返回值可以返回任意数据类型
  3. return的返回值无个数限制,即可以使用逗号隔开返回多个值
    • 0个:返回None
    • 1个:返回值是该值本身
    • 多个:返回值是元祖

四、函数的参数

  1. 形参和实参

    • 形参

      # 在函数定义阶段括号内定义的参数,称之为形式参数,简称形参,本质就是变量名。
      def func(x, y):
          print(x)
          print(y)
      
    • 实参

      # 在函数调用阶段括号内传入的参数,称之为实际参数,简称实参,本质就是变量的值。
      func(1, 2)
      
  2. 位置参数

    • 位置形参

      • 定义:在函数定义阶段,按照从左到右的顺序依次定义的形参
      • 特点:按照位置定义的形参,都必须被传值,且不能多不能少
      def func(x, y):
          print(x)
          print(y)
      
    • 位置实参

      • 定义:在函数调用阶段,按照从左到右的顺序依次定义的实参,称之为位置实参。
      • 特点:按照位置为对应的形参依次传值。
      func(1, 2)
      
  3. 关键字实参

    • 定义:在调用函数时,按照key=value的形式为指定的参数传值,称为关键字实参。

    • 特点:可以打破位置的限制,但仍能为指定的形参赋值。

    • 注意

      • 可以混用位置实参和关键字实参,但是位置实参必须在关键字实参的左边。
      • 可以混用位置实参和关键字实参,但不能对一个形参重复赋值。
      func(x, y=2)
      func(y=2, x)  # SyntaxError: positional argument follows keyword argument
      func(x, x=1)  # NameError: name 'x' is not defined
      
  4. 默认形参

    • 定义:在定义阶段,就已经被赋值

    • 特点:调用时可以不用为其赋值

    • 注意:

      • 位置形参必须放在默认形参的左边。
      • 默认形参的值只在定义阶段赋值一次,也就是说默认参数的值在函数定义阶段就已经固定了。
      def func(x, y=10):
          print(x)
          print(y)
          
      func(2)
      

五、可变长参数

  1. 可变长形参之*

    # 形参中的*会将溢出的位置实参全部接收,然后存储元组的形式,然后把元组赋值给*后的参数。需要注意的是:*后的参数名约定俗成为args。
    
    def sum_self(*args):
        res = 0
        for num in args:
            res += num
        return res
    
    
    res = sum_self(1, 2, 3, 4)
    print(res)
    
    10
    
  2. 可变长实参之*

    # * 实参中的*,*会将*后参数的值循环取出,打散成位置实参。以后但凡碰到实参中带*的,它就是位置实参,应该马上打散成位置实参去看。
    
    def func(x, y, z, *args):
        print(x, y, z, args)
    
    
    func(1, *(1, 2), 3, 4)
    
    1 1 2 (3, 4)
    
  3. 可变长形参之**

    # 形参中的**会将溢出的关键字实参全部接收,然后存储字典的形式,然后把字典赋值给**后的参数。需要注意的是:**后的参数名约定俗成为kwargs。
    
    def func(**kwargw):
        print(kwargw)
    
    
    func(a=5)
    
    {'a': 5}
    
  4. 可变长实参之**

    # 实参中的**,**会将**后参数的值循环取出,打散成关键字实参。以后但凡碰到实参中带**的,它就是关键字实参,应该马上打散成关键字实参去看。
    
    def func(x, y, z, **kwargs):
        print(x, y, z, kwargs)
    
    
    func(1, 3, 4, **{'a': 1, 'b': 2})
    
    1, 3, 4, {'a': 1, 'b': 2}
    
  5. 命名关键字形参

    • 定义:在函数定义阶段,*后面的参数都是命名关键字参数。
    • 特点:在传值时,必须按照key=value的方式传值,并且key必须命名关键字参数的指定的参数名。
    def register(x, y, **kwargs):
        if 'name' not in kwargs or 'age' not in kwargs:
            print('用户名和年龄必须使用关键字的形式传值')
            return
        print(kwargs['name'])
        print(kwargs['age'])
    
    
    register(1, 2, name='nick', age=19)
    
原文地址:https://www.cnblogs.com/binyuanxiang/p/11550356.html