首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么*在赋值语句和函数调用中的工作方式不同?

为什么*在赋值语句和函数调用中的工作方式不同?
EN

Stack Overflow用户
提问于 2019-06-26 07:11:36
回答 1查看 237关注 0票数 10

在Python中,varargs集合的工作方式似乎与赋值语句中序列解包的工作方式截然不同。我正在试图理解这种潜在的令人困惑的差异的原因。我相信有一个很好的理由,但它是什么呢?

代码语言:javascript
复制
# Example 1 with assignment statement
a, *b, c = 1,2,3,4
print(b) # [2, 3]

# Example 1 with function call
def foo(a, *b, c):
    print(b)
foo(1,2,3,4)

函数调用会导致以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "<pyshell#309>", line 1, in <module>
    foo(1,2,3,4)
TypeError: foo() missing 1 required keyword-only argument: 'c'

问题1:为什么不像赋值语句中那样赋值b?

代码语言:javascript
复制
# Example 2 with function call
def foo(*x):
    print(x)
    print(type(x))
foo(1,2,3) # (1, 2, 3) <class 'tuple'>

# Example 2 with assignment statement
a, *b, c = 1,2,3,4,5
print(b) # [2, 3, 4]
print(type(b)) # <class 'list'>

问题2:为什么类型(列表和元组)存在差异?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56763143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档