Python函数定义与参数传递详解:位置、关键字及可变参数

Chloe
Chloe
发布时间:2026-10-12 | 1人浏览过
原创

本文深入解析Python中函数的定义与调用机制,重点阐述def关键字的使用、形参与实参的区别,以及位置参数、关键字参数和可变参数(*args, **kwargs)的具体应用规则。通过代码示例说明参数传递顺序、默认值覆盖及返回值处理,帮助开发者掌握函数编写的核心技巧。

一、函数概述

从概念上讲,函数是一段用户自定义的代码片段,旨在提高代码的复用性和调用便利性。

在Python中,使用关键字 def 来定义函数,该关键字后跟随的标识符即为函数的名称。

当函数执行至 return 语句时,将返回指定值并终止函数运行。此时,函数内部的局部参数会被清空,变量占用的内存空间被释放,函数执行流程退出。

函数的基本语法结构如下:#x 代表传入的参数,该参数可选,若函数内部逻辑完全固定,也可不接收外部输入值。

def CeShi(x):
    '''
    用来测试 计算 如数的值 乘以 3 减去 2 的值
    :param x: 输入一个数字
    :return: 返回一个计算的结果
    '''
    y = x*3-2
    return y
a = CeShi(5)
print(a) #13

调用函数的标准方式为:函数名后紧跟一对圆括号 ()。

函数的主要作用在于简化重复出现的代码块,提升代码的可读性。

通过反复调用同一函数,可以显著降低代码维护成本,并便于后续的功能修改与扩展。

二、函数的调用

函数调用操作十分直观,只需写出函数名并加上括号 () 即可,具体实现方式如下所示。

def CeShi(x):
    '''
    用来测试 计算 如数的值 乘以 3 减去 2 的值
    :param x: 输入一个数字
    :return: 返回一个计算的结果
    '''
    y = x*3-2
    return y 
	
a = CeShi(5) #调用函数CeShi 并且给输入值是 5
print(a) #13

三、函数参数的使用规则

在函数定义中,参数主要分为两类:形参(形式参数)和实参(实际参数)。

形参仅在函数被调用期间分配内存单元,一旦调用结束,这些分配的内存即被释放。

实参则是调用函数时实际传入的、具有具体数值的变量或常量。

1、位置参数

位置参数遵循标准调用规则,即传入的值与函数定义中的关键字参数必须一一对应,且严格保持顺序,数量多或少均会导致错误。

def CeShi(w,x,y,z): 
    print(x)
    print(y)
    print(z)
CeShi(1,2,3,4)

例如,调用时传入的 1、2、3、4 这四个参数,其数量必须与函数定义中所需的参数数量完全一致。它们按照位置顺序依次赋值给函数中的 w、x、z、y,因此参数的位置至关重要,不可混淆。

2、关键字参数赋值

使用关键字参数时,无需严格遵循定义顺序,但传入参数的数量必须与函数定义中的参数数量保持一致。赋值格式为关键字等于值,例如 x = 1,b = 3。

def CeShi(w,x,y,z): #y会把 输入的 2到最后一个元素都被囊括在里面 ,如果只有一个值 也没有关系
    print(w)
    print(x)
    print(y)
    print(z)
CeShi(x=1,y=2,z=3,w=4)

3、位置参数和关键字参数混合使用

在混合调用时,所有位置参数必须位于关键字参数的左侧。

在一次函数调用中,同一个关键字参数不能被重复赋值,即不能覆盖之前已设定的值。

def CeShi(w,x,y,z): #y会把 输入的 2到最后一个元素都被囊括在里面 ,如果只有一个值 也没有关系
    print(w) #1
    print(x) #2
    print(y) #3
    print(z) #4
CeShi(1,2,z = 3,y = 4)

PS:

若函数定义中已包含默认参数值,调用时若未指定该参数,则默认使用函数内部定义的参数值。

然而,如果在调用时显式提供了自定义参数值,函数原有的默认参数值将被新传入的值覆盖。

4、参数组 **字典 *列表

*args 用于接收多余的位置参数。

**kwargs 用于接收多余的关键字参数。

当 *args 与 **kwargs 组合使用时,必须严格遵循此顺序表示,因为位置参数始终位于关键字参数的左侧。

5、*列表

无论第一个元素后跟随多少个元素,y 都会将它们打包成一个元组,视为一个整体。若没有额外元素传入,y 将返回一个空元组。

def CeShi(x,*y): #y会把 输入的 2到最后一个元素都被囊括在里面 ,如果只有一个值 也没有关系
	print(x) #1
	print(y) #(2, 3, 4, 5, 6)
CeShi(1,2,3,4,5,6)

如果传给 y 的值包含多个元素(如列表、元组或字典),在传入前添加 * 号,这些元素会被解包并依次传入 y 中,而不会被视为单个整体元素赋值给 y。需要注意的是,若传入字典,仅能保留其键(keys)。

def CeShi(x,*y): #y会把 输入的 2到最后一个元素都被囊括在里面 ,如果只有一个值 也没有关系
	print(x) #1
	print(y) #((2, 3, 4, 5, 6),)
CeShi(1,(2,3,4,5,6))
 
def CeShi(x,*y): #
	print(x) #1
	print(y) #(2, 3, 4, 5, 6)
CeShi(1,*[2,3,4,5,6]) #这里输入 元祖 字典 列表 都可以
 
def CeShi(x,*y): #
	print(x) #1
	print(y) #('a', 'b', 'c')
CeShi(1,*{'a': 2,'b':3,'c':4  }) #输入字典

6、**字典

此类参数的返回值将以字典形式呈现,且此处仅能接受关键字参数。

def CeShi(x,**kwargs):  #y会把 a = 1, b = 2, c = 3以字典的形式封装
	print(x)    #1
	print(kwargs) #{'a': 1, 'b': 2, 'c': 3}
CeShi(1,a = 1, b = 2, c = 3)

如果给

**kwargs 赋值的本身就是一个字典对象,则需要在该字典前加上 ** 符号以进行解包。

def CeShi(x,**kwargs):  #y会把 a = 1, b = 2, c = 3以字典的形式封装
	print(x)    #1
	print(kwargs) #{'a': 1, 'b': 2, 'c': 3}
CeShi(1,**{'a': 1, 'b': 2, 'c': 3})

还可以采用以下书写形式,以便接受任意类型的数据。

def CeShi(x,*args,**kwargs):  #
	print(x) #1
	print(args) #(2, 3, 4, 5)
	print(kwargs) #{'a': 1, 'b': 2, 'c': 3}
CeShi(1,2,3,4,5,a = 1, b = 2, c = 3)

PS:

若函数过程没有显式返回值,则视为无返回值的函数。

但在Python中,即使未定义返回值,解释器也会默认返回 None。

通常函数返回单个值;若需返回多个值,Python会将其打包为元组形式返回。

总结

本文到此结束,希望能为读者提供有益的帮助。欢迎持续关注本站,获取更多技术内容!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表