python的*星号表达式

错误写法:

*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写在一个空列表里也不会报错,这个除了在函数里面作用于作为形参,实参时,其他场景下使用只能使用元组和列表对象进行接收吗?求大佬解答

如果使用**对字典类型的对象进行解包呢?该怎样写

回答

我针对官网的发现做了尝试

##  __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,)有啥关系,你自己挖掘下吧

以上是python的*星号表达式的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>