Heim >Backend-Entwicklung >Python-Tutorial >Wie versteht man komplexe Entpackausdrücke in Python?

Wie versteht man komplexe Entpackausdrücke in Python?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-05 15:11:11477Durchsuche

How to Understand Complex Unpacking Expressions in Python?

Komplexe Auspackausdrücke verstehen

Bedenken Sie den folgenden Ausdruck:

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"                     # 错误 -- 太多值需要拆包
(a,b), c = "XY"                      # 错误 -- 需要拆包的数值太少

(a,b), c, = [1,2],'this'             # a = '1', b = '2', c = 'this'
(a,b), (c,) = [1,2],'this'           # 错误 -- 太多值需要拆包


                                     # 扩展序列拆包

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             # 错误 -- 赋值中出现了两个星号表达式

(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                               # 错误 -- 目标必须在一个列表或元组中
*a = (1,2)                           # 错误 -- 目标必须在一个列表或元组中
*a, = (1,2)                          # a = [1,2]
*a, = 1                              # 错误 -- 'int' 对象不可迭代
*a, = [1]                            # a = [1]
*a = [1]                             # 错误 -- 目标必须在一个列表或元组中
*a, = (1,)                           # a = [1]
*a, = (1)                            # 错误 -- 'int' 对象不可迭代

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

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


                                     # 扩展序列拆包 -- 嵌套

(a,b),c = 1,2,3                      # 错误 -- 太多值需要拆包
*(a,b), c = 1,2,3                    # a = 1, b = 2, c = 3

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

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

*(a, b) = 'this'                     # 错误 -- 目标必须在一个列表或元组中
*(a, b), = 'this'                    # 错误 -- 拆包的值太多了
*(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        # 错误 -- 赋值中出现了两个星号表达式
*(a,*b), (*c,) = 1,2,3,3,4,5,6,7     # 错误 -- '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    # 错误 -- 'int' 对象不可迭代
*(a,*b), (*c, d) = 1,2,3,3,4,5,6,7   # 错误 -- 'int' 对象不可迭代
*(a,*b), *(c, d) = 1,2,3,3,4,5,6,7   # 错误 -- 赋值中出现了两个星号表达式


*(a,b), c = 'XY', 3                  # 错误 -- 需要拆包的数值太少
*(*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                # 错误 -- 拆包的值太多了

Leiten Sie die Ergebnisse dieser Ausdrücke manuell ab

Sie zu verallgemeinern ist nicht schwierig, wenn Sie ein paar Grundregeln haben. Ich werde mein Bestes tun, um es anhand einiger Beispiele zu erklären. Da Sie die „manuelle“ Auswertung dieser Ausdrücke erwähnt haben, würde ich einige einfache Ersetzungsregeln vorschlagen. Grundsätzlich ist es für Sie einfacher, Ausdrücke zu verstehen, bei denen alle Iterables auf die gleiche Weise formatiert sind.

Nur ​​zum Auspacken sind die folgenden Ersetzungen in R-Werten (d. h. iterierbaren Objekten) gültig:

'XY' -> ('X', 'Y')
['X', 'Y'] -> ('X', 'Y')

Wenn Sie einen Wert finden, ist nicht entpackt, dann müssen Sie die Ersetzung rückgängig machen. (Weitere Erläuterungen finden Sie weiter unten.)

Außerdem stellen Sie sich vor, dass sich oben ein Tupel befindet, wenn Sie ein „nacktes“ Komma sehen. Tun Sie dies auf der linken und rechten Seite (d. h. iterierbar und rechts iterierbar):

'X', 'Y' -> ('X', 'Y')
a, b -> (a, b)

Das obige ist der detaillierte Inhalt vonWie versteht man komplexe Entpackausdrücke in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn