ホームページ >バックエンド開発 >Python チュートリアル >Python のアンパック式、拡張アンパック式、およびネストされた拡張アンパック式の結果を手動で推定する方法は?

Python のアンパック式、拡張アンパック式、およびネストされた拡張アンパック式の結果を手動で推定する方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-25 10:09:33793ブラウズ

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

アンパック、拡張アンパック、ネストされた拡張アンパックについて

質問

次の式を考えてください。 、「文脈」を表現するために一部が繰り返されていることに注意してください。

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 -- 要解包的值过多

このような式の結果を手動で正しく導出するにはどうすればよいでしょうか?

以上がPython のアンパック式、拡張アンパック式、およびネストされた拡張アンパック式の結果を手動で推定する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。