Python函数定义与参数传递详解:位置、关键字及可变参数
本文深入解析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会将其打包为元组形式返回。
总结
本文到此结束,希望能为读者提供有益的帮助。欢迎持续关注本站,获取更多技术内容!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













