python中的函数

定义

  1. 用于封装一个特定的功能,表示一个功能或者行为
  2. 函数是可以重复执行的语句块,可以重复调用

作用

提高代码的可重用性和可维护性(代码层次结构更清晰)

定义函数

  1. 语法:

    def 函数名(形式参数):
           函数体
    
  2. 说明:

    def关键字:全称是define,意为”定义”
    函数名:对函数体中语句的描述,规则与变量名相同
    形式参数:方法定义者要求调用者提供的信息
    函数体:完成该功能的语句

  3. 函数的第一行语句建议使用文档字符串描述函数的功能与参数

    def fun(args):
        """
        函数实现功能描述
        :param args: 参数含义
        :return: 返回值描述
        """
        函数体
    

调用函数

  1. 语法:函数名(实际参数)
  2. 说明:根据形参传递内容

返回值

  1. 定义:方法定义者告诉调用者的结果
  2. 语法:return 数据
  3. 说明:

    return后没有语句,相当于返回 None
    函数体没有return,相当于返回None
    传入可变对象+修改可变对象 --> 无需return

可变/不可变类型在传参时的区别

  1. 不可变类型参数有:
    数值型(整数,浮点数,复数)
    布尔值bool
    None 空值
    字符串str
    元组tuple
    固定集合frozenset
    
  2. 可变类型参数有:
    列表 list
    字典 dict
    集合 set
    
  3. 传参说明:
    不可变类型的数据传参时,函数内部不会改变原数据的值
    可变类型的数据传参时,函数内部可以改变原数据

函数内存分配

# 1. 将函数代码存储到内存代码区
def fun01():
    a = 10
# 2. 调用函数时,在内存中开辟一块空间(栈帧),存储在函数中定义的变量
fun01()
# 3. 调用结束,栈帧释放

函数参数

实参传递方式argument

  1. 位置实参:实参与形参的位置依次对应,函数名称(数据1,数据2)
  2. 序列实参:实参用*将序列拆解后与形参的位置依次对应,函数名称(*序列)[拆]
    作用:当参数过多时,可以通过容器传递信息
  3. 关键字实参:实参根据形参的名字进行对应,函数名称(形参名1=数据1,形参名2=数据2)
    作用:代码可读性相对较高,配合默认参数可以随意传参
  4. 字典关键字实参:实参用**将字典拆解后与形参的名字进行对应,函数名称(**字典)[拆]
    作用:配合形参的缺省参数,可以使调用者随意传参
    def fun01(p1, p2, p3):
        函数体
    #位置传参 
    fun01(1, 2, 3)
    # 序列传参
    list01 = [4, 5, 6]
    fun01(*list01)
    dict01 = {"a": 1, "b": 2, "c": 3}
    fun01(*dict01)  # 键值
    # 关键字传参
    fun01(p2=2, p1=1, p3=3)
    # 字典关键字传参
    dict01 = {"p2": 2, "p1": 1, "p3": 3}
    fun01(**dict01)
    

形参定义方式parameter

  1. 缺省参数(默认参数):实参可以不传递,函数名称(形参名1=默认值,形参名2=默认值)
    缺省参数必须自右至左依次存在,如果一个参数有缺省参数,则其右侧的所有参数都必须有缺省参数
    缺省参数可以有0个或多个,甚至全部都有缺省参数
  2. 位置形参:实参必须传递
  3. 星号元组形参:使用星号将实参合并为一个元组,函数名称(*args) [合]
    作用: 位置实参数量无限
    说明:一般命名为’args’,形参列表中最多只能有一个
  4. 命名关键字形参:星号元组形参后面的参数,要求实参必须是关键字实参
    函数名称(*args,a,b)
    函数名称(a,*,b = “”,c = “”)
    作用:强制实参使用关键字传参
  5. 双星号字典形参,函数名称(**kwargs) [合]
    作用:关键字实参数量无限
    说明:一般命名为’kwargs’, 形参列表中最多只能有一个
    # 默认参数
    def fun01(p1="", p2=0, p3=0.0):
    	函数体
    fun01()
    fun01("张三", 10, 5.6)
    # 关键字实参 + 默认参数:实参可以随意传递
    fun01(p2=100)
    # 位置形参
    def fun02(p1, p2, p3):
    	函数体
    # 星号元组形参
    def fun03(*args):
        函数体
    fun03()
    fun03(4, 54, 5, 65, 6)
    # 命名关键字形参
    def fun04(*args, a, b=0):
        函数体
    fun04(34, 45, 54, 56, 67, 87, a=1, b=2)
    fun04(34, 45, 54, 56, 67, 87, a=1)
    # 命名关键字形参:星号后面的参数
    # 要求实参必须是关键字实参.
    def fun05(a, *, b=0, c=""):
        函数体
    fun05(5, b=6, c=7)
    fun05(5, c=7)
    # 双星号字典形参:
    def fun05(**kwargs):
        函数体
    fun05(a=1, b=2, c=3)
    

参数自左至右的顺序

位置形参 --> 星号元组形参 --> 命名关键字形参 --> 双星号字典形参

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值