Python3之函数的参数传递与参数定义

函数的参数传递

函数传参方式分为两大类,四小类

  1. 位置传参
    ~序列传参
  2. 关键字传参
    ~字典关键字传参

位置传参

实参的对应关系与形参的对应关系是借位置来依次对应的
实例:

def mymin(a, b, c):
    pass

mymin(1, 2, 3)

上边的栗子很好的解释了位置的对应关系,1,2,3分别对应a,b,c

说明:
~实参和形参通过位置进行传参和匹配
~实参的个数必须与形参的个数相同

序列传参

序列传参是指在调用过程中,用 * 将序列拆解后按位置进行传递的传参方式

说明:
序列传参时,序列拆解的位置与形参一一对应
序列的位置信息对应相应的参数位置

实例:

def myfun(a, b, c):
    print('a:', a)
    print('b:', b)
    print('c:', c)

s1 = [1, 2, 3]
s2 = [4, 5, 6]
s3 = 'ABC'

myfun(*s1)  # == myfun(s1[0],s1[1],s1[2])
myfun(*s2)  # == myfun(s2[0],s2[1],s2[2])
myfun(*s3)  # == myfun(s3[0],s3[1],s3[2])

由实例讲解:
myfun有三个参数,所以我们也要传递三个参数,其中s1列表有3个元素,其实我已经写出来了,调用函数传递参数时会在列表名前加一个 ‘ * ’ 号,表示按列表的元素位置传参,即第一个参数传s[0],第二个参数传s[1],第三个参数传s[2]。其实看实例就懂了,就不多啰嗦了

关键字传参

关键字传参,是只指在传参时,按照形参的名称给实参赋值
实参和形参按名称进行匹配

实例:

>>> def myfun(a, b, c):
    print('a:', a)
    print('b:', b)
    print('c:', c)
>>> myfun(b = 23, c = 34, a = 12)
a: 12
b: 23
c: 34

虽然传递参数时不是按abc的顺序传递的,但却能各就其位,这就是关键字传参的好处了吧。

说明:实参和形参按照形参名进行匹配,可以不按位置进行匹配。没毛病

字典关键字传参

字典关键字传参是指实参为字典,将字典用 ** 拆解后进行关键字传参的方式

说明:

  • 字典的键名和形参名一致
  • 字典的键名必须是字符串(且为标识符的命名方式)
  • 字典的键名要在形参中存在

函数的综合传参

~函数的传参方式,在能确定形参能唯一匹配到相应实参的情况下可以任意组合
~函数的位置传参要先于关键字传参
说明:
1. 位置传参和序列传参可以混合使用,也可以顺序颠倒
如:
myfun(100, *[100, 200])
myfun(*[100, 200], 300)
myfun([100], 200, [300])
2. 函数的关键字传参和字典关键字传参可以混合使用也可以顺序颠倒
如:
myfun(c=300, **{‘b’: 10, ‘a’: 20})
myfun( **{‘b’: 10, ‘c’: 20}, a = 30)
3. 位置传参和关键字传参可以混合使用,但位置传参要先于关键字传参
如:
myfun(100, c=200, b=10)
myfun(10, c=30, **{‘b’:200})

函数的缺省参数

~缺省参数必须自左至右依次存在,如果一个参数有缺省参数,则其右侧的所有参数必须有缺省参数
~缺省参数可以有0个或多个,甚至全部都有缺省参数

实例:

def fn(a, b=10, c):  # 错误
    pass
def fn(a, b=12, c=23):  # 正确
    pass

函数形参的定义方式:

  • 位置
  • 星号元组
  • 命名关键字
  • 双星字典

位置形参

语法:

def 函数名(形参名1,形参名2...):
    语句块

星号元组形参

语法:

def 函数名(*元组形参名):
    语句块

作用:收集多于的位置形参

实例:

def func(a, b, *args):
    print('a=',a)
    print('b=',b)
    print('args=',args)

func(1, 2, 3, 4, 5, 6, 7, 8, 9)

先按位置传参:a=1, b=2, 剩下的都给 *args
打印结果:

a= 1
b= 2
args= (3, 4, 5, 6, 7, 8, 9)

命名关键字形参:

语法:

def 函数名(*, 命名关键字形参):
    语句块
或
def 函数名(*args, 命名关键字形参):
    语句块

作用:
强制所有的参数都必须用关键字传参或字典关键字传参

实例:

def fun(*, c, d):
    print('c=', c)
    print('d=', d)

def fun2(a, b, *, c, d):  # *是位置传参和关键字传参的分隔符
    print(a, b, c, d)

def fun3(a, b, *args, c, d):
    print(a, b, args, c, d)

# fun(3, 4)  # 出错
fun(d=2, c=3)
fun2(1, 2, c=3, d=4)
fun3(11, 22, 33, 44, 55, c=66, d=77)
fun3(11, 22, **{'d': 4, 'c': 5})

打印结果:

c= 3
d= 2
1 2 3 4
11 22 (33, 44, 55) 66 77
11 22 () 5 4

双星号字典形参

语法:

def 函数名(**字典形参名):
    语句块 

作用:收集多余的关键字传参

实例:

def fun(**kwargs):
    print('关键字传参的个数:', len(kwargs))
    print('kwargs=', kwargs)

fun(name='zhangsan', age=12, address='北京朝阳区')
fun(a=1, b='bbb', c=[1, 2, 3], d=True)
fun(a=100, **{'c': 300, 'd': 200})

打印结果:

关键字传参的个数: 3
kwargs= {'name': 'zhangsan', 'age': 12, 'address': '北京朝阳区'}
关键字传参的个数: 4
kwargs= {'a': 1, 'b': 'bbb', 'c': [1, 2, 3], 'd': True}
关键字传参的个数: 3
kwargs= {'a': 100, 'c': 300, 'd': 200}
函数的参数说明:

位置形参,缺省参数,星号元组形参,双星号字典形参等可以混合使用

函数形参从左向右的顺序为:
1. 位置形参
2. 星号元组形参
3. 命名关键字形参
4. 双星号字典形参
实例:

def fn(a, b, *args, c, **kwargs):
    print(a, b, args, c, kwargs)

fn(1, 2, 3, 4, d='d', e='e', c='c')

打印结果:

1 2 (3, 4) c {'d': 'd', 'e': 'e'}

本节完

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秒不可闫M先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值