首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详解Python序列解包(5)

详解Python序列解包(5)

作者头像
Python小屋屋主
发布2018-04-16 15:18:55
9250
发布2018-04-16 15:18:55
举报
文章被收录于专栏:Python小屋Python小屋

如果一个函数需要以多种形式来接收参数,定义时一般把位置参数放在最前面,然后是默认值参数,接下来是一个星号的可变长度参数,最后是两个星号的可变长度参数;调用函数时,一般也按照这个顺序进行参数传递。调用函数时如果对实参使用一个星号*进行序列解包,那么这些解包后的实参将会被当做普通位置参数对待,并且会在关键参数和使用两个星号**进行序列解包的参数之前进行处理。

# 定义函数

>>> def demo(a, b, c):

print(a, b, c)

# 调用函数,序列解包

>>> demo(*(1, 2, 3))

1 2 3

# 位置参数和序列解包同时使用

>>> demo(1, *(2, 3))

1 2 3

>>> demo(1, *(2,), 3)

1 2 3

# 一个星号的序列解包相当于位置参数,优先处理,重复为a赋值,引发异常

>>> demo(a=1, *(2, 3))

TypeError: demo() got multiple values for argument 'a'

# 重复给b赋值,引发异常

>>> demo(b=1, *(2, 3))

TypeError: demo() got multiple values for argument 'b'

# 一个星号的序列解包相当于位置参数,尽管放在后面,但是仍会优先处理

>>> demo(c=1, *(2, 3))

2 3 1

# 序列解包不能在关键参数解包之后,否则会引发异常

>>> demo(**{'a':1, 'b':2}, *(3,))

SyntaxError: iterable argument unpacking follows keyword argument unpacking

# 一个星号的序列解包相当于位置参数,优先处理,重复为a赋值,引发异常

>>> demo(*(3,), **{'a':1, 'b':2})

TypeError: demo() got multiple values for argument 'a'

>>> demo(*(3,), **{'c':1, 'b':2})

3 2 1

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-07-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档