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

作者:路痴队长 时间:2021-10-19 21:28:25 

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)来调用fun2函数,这里关键就是前面的3,4覆盖了原来a、b两个形参的值,但c还是不变采用原来的默认值3,这种模式相较第一种更加灵活,不仅可以通过fun6(c=5,a=2,b=7)来打乱行参的位置,而且可以在没有对应形参传递的时候使用定义函数时的默认值。

第三种 fun3(*args) ,这定义方式在传参时是可以传入任意个参数,这些若干参数都被放到了tuple元组中赋值给行参args,之后要在函数中使用这些行参,直接操作args这个tuple元组就可以了,这样的好处是在参数的数量上没有了限制,但是因为是tuple,其本身还是有次序的,这就仍然存在一定的束缚,在对参数操作上也会有一些不便

第四种 fun4(**kargs)最为灵活,其是以键值对字典的形式向函数传参,含有第二种位置的灵活的同时具有第三种方式的数量上的无限制。此外第三四种函数声明的方式前的'*',与c里面的指针声明一样,这里仅做声明标识之用

最后要强调的是四种定义和传递方式混合使用(大多数情况是这种),fun7(a,b,c,**d),但四种方式混用时要遵守:定义和传递时,*kargs必须在*args之后

混合使用时的赋值过程为:

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

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

3、将多余的key=value形式的实参打包正一个dicrionary传递给**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}

来源:https://www.cnblogs.com/We612/p/12202337.html

标签:Python,函数,参数,定义,传递
0
投稿

猜你喜欢

  • php+mysql查询优化简单实例

    2023-07-21 18:36:32
  • Python求两个文本文件以行为单位的交集、并集与差集的方法

    2021-12-25 09:12:18
  • Python实现快速傅里叶变换的方法(FFT)

    2022-09-18 07:21:47
  • python之cur.fetchall与cur.fetchone提取数据并统计处理操作

    2023-11-30 05:34:06
  • GoLang使goroutine停止的五种方法实例

    2023-09-02 08:31:33
  • 如何基于python实现年会抽奖工具

    2022-01-28 04:24:42
  • 巧用MySQL InnoDB引擎锁机制解决死锁问题

    2008-12-19 17:24:00
  • 四种方法在SQL Server数据库中成批导入数据

    2009-02-19 17:25:00
  • 使用 JavaScript 获取本地盘符

    2010-01-12 13:49:00
  • XML教程 WEB页面工具语言XML的定义

    2008-05-29 10:54:00
  • 用ASP读取/写入UTF-8编码格式的文件

    2007-08-20 09:29:00
  • Data URI小试 —— 在旺旺点灯(JS)上的应用

    2009-10-30 18:28:00
  • 怎么样用xmlhttp读取远程xml的数据

    2008-10-11 13:52:00
  • PHPMyadmin2.10中文显示为乱码的解决办法

    2007-08-22 08:18:00
  • python编程进阶之类和对象用法实例分析

    2022-04-01 23:59:03
  • Python基于smtplib协议实现发送邮件

    2021-03-02 07:26:36
  • 亚马逊购物用户体验分析 (二)

    2009-10-25 12:48:00
  • asp 横排显示数据

    2011-03-10 10:50:00
  • Python实现图像随机添加椒盐噪声和高斯噪声

    2023-06-13 22:54:36
  • Python docutils文档编译过程方法解析

    2023-01-20 16:41:23
  • asp之家 网络编程 m.aspxhome.com