Python函数参数定义及传递方式解析

Miles
Miles
发布时间:2026-10-14 | 4人浏览过
原创

本文详细解析Python中函数的四种参数定义形式:位置参数、关键字参数、*args元组参数及**kwargs字典参数。通过对比分析,阐述它们在函数调用时的匹配规则、默认值处理及混合使用时的优先级顺序,帮助开发者灵活掌握参数传递机制。

Python函数参数的四种基本形式

在Python语言中,函数定义时的参数形式主要包含四种类型。


def fun1(a,b,c):
  pass
def fun2(a=1,b=2,c=3):
  pass
def fun3(*args):
  pass
def fun4(**kargs):
  pass

在这四种形式中,前两种最为常见,通常基础教程都会涵盖;而后两种较少单独使用,更多出现在混合模式的场景中。

第一种形式 fun1(a,b,c) 采用位置匹配机制,即将实参直接赋予对应的形参。这种方式严格要求实参的数量和位置必须与形参完全一致,这是大多数编程语言通用的标准做法。

第二种形式 fun2(a=1,b=2,c=3) 基于键值对进行匹配,允许忽略参数的位置关系,直接通过关键字赋值。这种模式的优势在于调用时可灵活指定部分参数,无需保证数量相等。例如调用 fun5(3,4) 时,前两个实参覆盖了形参 a 和 b 的默认值,而 c 仍保留默认值 3。此外,还支持通过 fun6(c=5,a=2,b=7) 打乱参数顺序进行赋值,若未传递某些参数,则自动使用定义时的默认值,比第一种方式更为灵活。

第三种形式 fun3(*args) 允许传入任意数量的参数,这些参数会被打包成一个 tuple 元组并赋值给形参 args。在函数内部直接操作该 tuple 即可。这种方式突破了参数数量的限制,但由于 tuple 具有固定次序,操作时仍受一定约束,可能在参数处理上带来不便。

第四种形式 fun4(**kargs) 最为灵活,它以键值对字典的形式接收参数,兼具第二种方式的位置灵活性和第三种方式的数量无限制特性。需要注意的是,声明中的 '*' 和 '**' 仅作为标识符使用,类似于 C 语言中的指针声明符号,用于区分参数类型。

混合使用规则与赋值逻辑

实际开发中,大多数情况是这四种定义和传递方式的混合使用,例如 fun7(a,b,c,**d)。在混合使用时,必须遵守一个核心规则:在定义和传递参数时,**kargs 必须位于 *args 之后。

混合使用时的参数赋值过程遵循以下逻辑:

1、首先根据前两种形式定义的函数,按顺序将实参赋值给对应的形参;

2、将多余的非键值对实参打包组成一个 tuple,传递给 *args;

3、将多余的 key=value 形式的实参打包成一个 dictionary,传递给 **kargs。

具体示例如下:


def test(x,y=5,*a,**b):
  print x,y,a,b
#调用结果:
test(1) ===> 1 5 () {}
test(1,2) ===> 1 2 () {}
test(1,2,3) ===> 1 2 (3,) {}
test(1,2,3,4) ===> 1 2 (3,4)
test(x=1) ===> 1 5 () {}
test(x=1,y=1) ===> 1 1 () {}
test(x=1,y=1,a=1) ===> 1 1 () {'a':1} 
test(x=1,y=1,a=1,b=1) ===> 1 1 () {'a':1,'b':1}
test(1,y=1) ===> 1 1 () {}
test(1,2,y=1) ===> 出错,说y给赋了多个值
test(1,2,3,4,a=1) ===> 1 2 (3,4) {'a':1}
test(1,2,3,4,k=1,t=2,o=3) ===> 1 2 (3,4) {'k':1,'t':2,'o':3}

以上即为本文关于Python函数参数传递机制的全部内容,希望能为读者的学习提供有益参考,欢迎继续支持本站获取更多技术资讯。

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表