美文网首页
Python基础(十): 函数的基本概念

Python基础(十): 函数的基本概念

作者: 伯wen | 来源:发表于2018-03-03 17:37 被阅读7次

函数的概念

  • 概念: 写了一段代码实现了某个小功能; 然后把这些代码集中到一块, 起一个名字; 下一次就可以根据这个名字再次使用这个代码块, 这就是函数
  • 作用
    • 方便代码的重用
    • 分解任务, 简化程序逻辑
    • 使代码更加模块化
  • 函数分类
    • 内建函数: Python中已经存在的函数
    • 三方函数: 其他人写的函数, 我们只需要调用
    • 自定义函数: 根据需求, 我们自己写的函数

函数的基本使用

  • 定义:
def 函数名(参数列表):
    函数体
  • 调用:
函数名(参数列表)

无参无返回值函数

  • 没有参数, 也没有返回值的函数
def test():
    print(1 + 2)
test()      # 打印: 3

函数的参数

  • 单个参数的函数

    • 定义
    def test(num):
        print(num ** 2)
    
    • 调用
    test(3)     # 打印: 9
    
    • 上述代码中, num是形参, 函数调用时的3是实参
  • 多个参数的函数

    • 定义
    def sum(num1, num2, num3):
        print(num1 + num2 + num3)
    
    • 调用:
    # 形参与实参一一对应
    sum(1, 2, 3)        # 打印: 6
    
    # 指明形参名称, 不需要按照顺序
    sum(num3 = 3, num1 = 1, num2 = 2)       # 打印: 6
    
  • 不定长参数: 不同的应用场景, 传递参数数量不等

    • 参数为元组: 在参数名前添加一个*, 表示该函数参数数量不固定, 在函数内参数以元组的方式使用
      • 定义
      def sum(*args):
          result = 0
          for i in args:
              result += i
          print(result)
      
      • 调用
      sum(1, 2, 3, 4)         # 打印: 10
      
    • 参数为字典: 在参数名前添加**, 表示该函数参数数量不固定, 在函数内参数以字典的方式使用, 调用该函数时需要指明参数的keyvalue
      • 定义:
      def info(**kwargs):
          print("我的名字是 %s, 年龄是 %d" % (kwargs["name"], kwargs["age"]))
      
      • 调用
      info(name="张三", age=18)       # 打印: 我的名字是 张三, 年龄是 18
      
    • 装包: 把传递的参数, 包装成一个集合, 称之为"装包", 上述两种方式都是装包的过程
    • 拆包: 把集合参数, 再次分解成单独的个体, 称之为"拆包"
      • 现有如下函数
      def sum(*args):
          print(args)
      
      • 我们现在知道, sum函数中的args参数, 是一个元组, 那么如果我们在函数调用时传入一个元组
      tuple = (1, 2, 3, 4)
      sum(tuple)      # 打印: ((1, 2, 3, 4),)
      
      • 很明显, 传入的元组被装包成了一个嵌套元组
      • 如果我们想要传入的元组, 在sum函数内部的args与实参tuple一样, 则需要拆包
      sum(*tuple)     # 打印: (1, 2, 3, 4)
      
      • 参数为字典, 与之类似
      def info(**kwargs):
          print(kwargs)
      
      dic = {"name" : "张三", "age" : 18}
      info(**dic)       # 打印: {'name': '张三', 'age': 18}
      
      • 拆包的应用场景, 可以用字典拆包的方式给多参数函数传递实参
      def sum(num1, num2):
          print(num1 + num2)
      
      dic = {"num1" : 1, "num2" : 2}
      sum(**dic)      # 打印: 3
      
  • 缺省参数: 函数定义时, 可以给某些参数设置默认值, 调用时可以不传递该参数, 使用默认值

    • 定义
    def sum(num1 = 1, num2 = 2):
        print(num1 + num2)
    
    • 调用
    sum()               # 打印: 3
    sum(num2 = 5)       # 打印: 6
    
  • 注意事项:

    • 函数调用时, 参数传递分为两种, 分别为 值传递 和 地址传递
    • 值传递: 调用函数时, 函数内修改形参的值, 函数外的实参不变
    • 地址传递: 调用函数时, 将实参的地址传递给形参, 形参改变值, 实参的值也会改变
    • Python中只有地址传递, 没有值传递

Pyhton中参数的地址传递分为两种

  1. 当实参是不可变的数据类型时, 函数内形参改变, 不会改变实参
  2. 当实参是可变的数据类型时, 函数内形参改变, 实参也会改变

函数的返回值

  • 当我们通过某个函数, 处理好数据之后, 想要拿到处理的结果, 就是函数的返回值
  • 语法
    def 函数名(参数列表):
        函数体
        return 返回值
    
  • 注意事项
    • return后面的代码不会被执行
    • 一个函数只有一个返回值, 只会返回一次
    • 如果想要返回多个值, 需要把这些值包装成集合, 例如元组, 列表, 字典...

函数的使用描述

  • 场景: 为我们自己写的函数添加注释, 方便自己和其他人使用
  • 定义: 直接在函数体的最上面, 添加三个双引号对注释
def 函数名(参数列表):
    '''这里是函数的使用描述(注释)'''
    函数体
  • 示例:
def sum(num1, num2):
    '''
    求两个数的和
    :param num1:  数值1, 数值类型
    :param num2:  数值2, 数值类型
    :return:   返回两个数的和, 数值类型
    '''
    retrun num1 + num2
  • 可以使用help(函数名)函数来查看一个函数的使用文档
help(sum)
# 打印如下: 
Help on function sum in module __main__:

sum(num1, num2)
    求两个数的和
    :param num1:  数值1, 数值类型
    :param num2:  数值2, 数值类型
    :return:   返回两个数的和, 数值类型
  • 函数的注释一般需要说明三点: 函数的功能, 参数和返回值

相关文章

网友评论

      本文标题:Python基础(十): 函数的基本概念

      本文链接:https://www.haomeiwen.com/subject/mqfxfftx.html