> 백엔드 개발 > 파이썬 튜토리얼 > Python에서 복잡한 압축 풀기 표현식을 이해하는 방법은 무엇입니까?

Python에서 복잡한 압축 풀기 표현식을 이해하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-05 15:11:11
원래의
485명이 탐색했습니다.

How to Understand Complex Unpacking Expressions in Python?

복잡한 압축 풀기 표현식 이해

다음 표현식을 고려하세요.

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                # 错误 -- 拆包的值太多了
로그인 후 복사

이러한 표현식의 결과를 수동으로 도출합니다.

몇 가지 기본 규칙만 있으면 일반화하는 것은 어렵지 않습니다. 몇 가지 예를 들어 설명하기 위해 최선을 다하겠습니다. 이러한 표현식을 "수동으로" 평가한다고 언급했으므로 몇 가지 간단한 대체 규칙을 제안하겠습니다. 기본적으로 모든 반복 가능 항목이 동일한 방식으로 형식화되는 표현식을 이해하는 것이 더 쉽다는 것을 알게 될 것입니다.

압축 풀기 목적으로만 rvalue(즉, 반복 가능한 객체)에서 다음 대체가 유효합니다.

'XY' -> ('X', 'Y')
['X', 'Y'] -> ('X', 'Y')
로그인 후 복사

값이 다음과 같은 경우 압축을 풀지 않은 경우 대체를 취소해야 합니다. (자세한 설명은 아래를 참조하세요.)

그리고 "bare" 쉼표가 보이면 맨 위에 튜플이 있다고 상상해 보세요. 왼쪽과 오른쪽에서 이 작업을 수행합니다(즉, 반복 가능 및 오른쪽 반복 가능).

'X', 'Y' -> ('X', 'Y')
a, b -> (a, b)
로그인 후 복사

위 내용은 Python에서 복잡한 압축 풀기 표현식을 이해하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿