*a=range(0,5,2)#错误提示SyntaxError: starred assignment target must be in a list or tuple
a,=range(0,5,2)
[a]=range(0,5,2)
a后面加个逗号是将a声明为省略括号的元组类型吗?为什么要这样写,不能直接使用a,第二种写法是将a写在一个空列表里也不会报错,这个除了在函数里面作用于作为形参,实参时,其他场景下使用只能使用元组和列表对象进行接收吗?求大佬解答
如果使用**对字典类型的对象进行解包呢?该怎样写
我发现闪存贴给你的链接你没看
官方形容 *a,
是错误的语法,但是,是有效的 https://peps.python.org/pep-3132/#:~:text=This%2C however%2C is valid syntax%3A
**
和*
的用法类似,只不过**
针对key-value的参数 https://peps.python.org/pep-0448/
我针对官网的发现做了尝试
## __file__:demo.py
# *a, = range(5)
# [*a] = range(5)
(*a,) = range(5)
print(a)
分别用 dis 模块查看这三行代码的字节码,可以看到输出是一样的
>python -m dis demo.py
9 0 LOAD_NAME 0 (range)
2 LOAD_CONST 0 (5)
4 CALL_FUNCTION 1
6 UNPACK_EX 0
8 STORE_NAME 1 (a)
10 10 LOAD_NAME 2 (print)
12 LOAD_NAME 1 (a)
14 CALL_FUNCTION 1
16 POP_TOP
18 LOAD_CONST 1 (None)
20 RETURN_VALUE
python 里面当元组只有一个参数时,写法是 (param,)
,那么 SyntaxError: starred assignment target must be in a list or tuple
就说的通了,至于 *a,
与(*a,)
有啥关系,你自己挖掘下吧
谢谢大佬!a,和[a]明白了a,就是省略括号的元组类型的简写,python规定死的在星号表达式中必须使用列表类对象和元组类对象,但是还有点问题,【如果作用在函数里的对象返回的是元祖类型的值,这里返回的类型却是列表】;【还有对字典进行解包时,作用在函数里时是用**,组包对象是以字典形式返回的;使用星号表达式对字典类型的对象进行组包的话只能用,如果使用两个会报无效语法(SyntaxError: invalid syntax),而且默认只返回字典的key以列表的形式返回,或者在解包时指定字典里的items方法是才会返回对应的key:value值,而且是以列表嵌套元组的方式返回的,星号表达式没有使用的方法还是用法不一样】
b={'a':1,'b':2}
*c,=b.items()
('a', 1), ('b', 2)]
@Ttonet: 返回值为啥是列表,你去搜Python字节码
就知道了