Maison >développement back-end >Tutoriel Python >Comment déduire manuellement les résultats des expressions de déballage, de déballage étendu et de déballage étendu imbriquées de Python ?

Comment déduire manuellement les résultats des expressions de déballage, de déballage étendu et de déballage étendu imbriquées de Python ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-25 10:09:33793parcourir

How to Manually Deduce the Results of Python's Unpacking, Extended Unpacking, and Nested Extended Unpacking Expressions?

Comprendre le déballage, le déballage étendu et le déballage étendu imbriqué

Questions

Considérez les expressions suivantes , notant que certains sont répétés pour exprimer le « contexte ».

a, b = 1, 2                          # 简单序列赋值
a, b = ['green', 'blue']             # 列表赋值
a, b = 'XY'                          # 字符串赋值
a, b = range(1,5,2)                  # 任何可迭代的对象都可以

                                     # 嵌套的序列赋值

(a,b), c = "XY", "Z"                 # a = 'X', b = 'Y', c = 'Z' 

(a,b), c = "XYZ"                     # ERROR -- 太多要解包的值
(a,b), c = "XY"                      # ERROR -- 需要超过 1 个要解包的值

(a,b), c, = [1,2],'this'             # a = '1', b = '2', c = 'this'
(a,b), (c,) = [1,2],'this'           # ERROR -- 太多要解包的值


                                     # 扩展的序列解包

a, *b = 1,2,3,4,5                    # a = 1, b = [2,3,4,5]
*a, b = 1,2,3,4,5                    # a = [1,2,3,4], b = 5
a, *b, c = 1,2,3,4,5                 # a = 1, b = [2,3,4], c = 5

a, *b = 'X'                          # a = 'X', b = []
*a, b = 'X'                          # a = [], b = 'X'
a, *b, c = "XY"                      # a = 'X', b = [], c = 'Y'
a, *b, c = "X...Y"                   # a = 'X', b = ['.','.','.'], c = 'Y'

a, b, *c = 1,2,3                     # a = 1, b = 2, c = [3]
a, b, c, *d = 1,2,3                  # a = 1, b = 2, c = 3, d = []

a, *b, c, *d = 1,2,3,4,5             # ERROR -- 赋值中存在两个星号表达式

(a,b), c = [1,2],'this'              # a = '1', b = '2', c = 'this'
(a,b), *c = [1,2],'this'             # a = '1', b = '2', c = ['this']

(a,b), c, *d = [1,2],'this'          # a = '1', b = '2', c = 'this', d = []
(a,b), *c, d = [1,2],'this'          # a = '1', b = '2', c = [], d = 'this'

(a,b), (c, *d) = [1,2],'this'        # a = '1', b = '2', c = 't', d = ['h', 'i', 's']

*a = 1                               # ERROR -- 目标必须在列表或元组中
*a = (1,2)                           # ERROR -- 目标必须在列表或元组中
*a, = (1,2)                          # a = [1,2]
*a, = 1                              # ERROR -- 'int' 对象不可迭代
*a, = [1]                            # a = [1]
*a = [1]                             # ERROR -- 目标必须在列表或元组中
*a, = (1,)                           # a = [1]
*a, = (1)                            # ERROR -- 'int' 对象不可迭代

*a, b = [1]                          # a = [], b = 1
*a, b = (1,)                         # a = [], b = 1

(a,b),c = 1,2,3                      # ERROR -- 太多要解包的值
(a,b), *c = 1,2,3                    # ERROR - 'int' 对象不可迭代
(a,b), *c = 'XY', 2, 3               # a = 'X', b = 'Y', c = [2,3]


                                     # 扩展的序列解包 -- 嵌套

(a,b),c = 1,2,3                      # ERROR -- 太多要解包的值
*(a,b), c = 1,2,3                    # a = 1, b = 2, c = 3

*(a,b) = 1,2                         # ERROR -- 目标必须在列表或元组中
*(a,b), = 1,2                        # a = 1, b = 2

*(a,b) = 'XY'                        # ERROR -- 目标必须在列表或元组中
*(a,b), = 'XY'                       # a = 'X', b = 'Y'

*(a, b) = 'this'                     # ERROR -- 目标必须在列表或元组中
*(a, b), = 'this'                    # ERROR -- 要解包的值过多
*(a, *b), = 'this'                   # a = 't', b = ['h', 'i', 's']

*(a, *b), c = 'this'                 # a = 't', b = ['h', 'i'], c = 's'

*(a,*b), = 1,2,3,3,4,5,6,7           # a = 1, b = [2, 3, 3, 4, 5, 6, 7]

*(a,*b), *c = 1,2,3,3,4,5,6,7        # ERROR -- 赋值中存在两个星号表达式
*(a,*b), (*c,) = 1,2,3,3,4,5,6,7     # ERROR -- 'int' 对象不可迭代
*(a,*b), c = 1,2,3,3,4,5,6,7         # a = 1, b = [2, 3, 3, 4, 5, 6], c = 7
*(a,*b), (*c,) = 1,2,3,4,5,'XY'      # a = 1, b = [2, 3, 4, 5], c = ['X', 'Y']

*(a,*b), c, d = 1,2,3,3,4,5,6,7      # a = 1, b = [2, 3, 3, 4, 5], c = 6, d = 7
*(a,*b), (c, d) = 1,2,3,3,4,5,6,7    # ERROR -- 'int' 对象不可迭代
*(a,*b), (*c, d) = 1,2,3,3,4,5,6,7   # ERROR -- 'int' 对象不可迭代
*(a,*b), *(c, d) = 1,2,3,3,4,5,6,7   # ERROR -- 赋值中存在两个星号表达式


*(a,b), c = 'XY', 3                  # ERROR -- 需要超过 1 个要解包的值
*(*a,b), c = 'XY', 3                 # a = [], b = 'XY', c = 3
(a,b), c = 'XY', 3                   # a = 'X', b = 'Y', c = 3

*(a,b), c = 'XY', 3, 4               # a = 'XY', b = 3, c = 4
*(*a,b), c = 'XY', 3, 4              # a = ['XY'], b = 3, c = 4
(a,b), c = 'XY', 3, 4                # ERROR -- 要解包的值过多

Comment dériver correctement le résultat d'une telle expression manuellement ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn