[python] 튜플 정의에서 후행 쉼표를 사용하는 구문 규칙은 무엇입니까?

단일 요소 튜플의 경우 후행 쉼표가 필요합니다.

a = ('foo',)

여러 요소가있는 튜플은 어떻습니까? 후행 쉼표가 있는지 여부에 관계없이 둘 다 유효한 것 같습니다. 이 올바른지? 후행 쉼표를 사용하면 편집하기가 더 쉽습니다. 그게 나쁜 코딩 스타일인가요?

a = ('foo1', 'foo2')
b = ('foo1', 'foo2',)



답변

빈 튜플을 제외한 모든 경우에 쉼표가 중요합니다. 괄호는 다른 구문상의 이유로 필요한 경우에만 필요합니다. 즉, 튜플을 함수 인수 집합, 연산자 우선 순위에서 구별하거나 줄 바꿈을 허용하기 위해 필요합니다.

튜플, 목록 또는 함수 인수의 후행 쉼표는 특히 여러 줄로 분할 된 긴 초기화가있는 경우 좋은 스타일입니다. 항상 후행 쉼표를 포함하면 다른 요소를 추가하고 대신 유효한 표현식을 생성하기 위해 끝에 다른 줄을 추가하지 않습니다.

a = [
   "a",
   "b"
   "c"
]

나중에 확장 된 2 개 요소 목록으로 시작되었다고 가정하면 즉시 명백하지 않은 방식으로 잘못되었습니다. 항상 후행 쉼표를 포함하고 그 함정을 피하십시오.


답변

단일 항목 튜플이 튜플 또는 괄호로 둘러싸인 표현식을 정의하는 것을 명확하게하는 데만 필요합니다.

(1)  # the number 1 (the parentheses are wrapping the expression `1`)
(1,) # a 1-tuple holding a number 1

둘 이상의 항목의 경우 튜플이라는 것이 완벽하게 명확하므로 더 이상 필요하지 않습니다. 그러나 후행 쉼표를 사용하면 여러 줄을 사용하여 쉽게 정의 할 수 있습니다. 실수로 쉼표를 생략했기 때문에 구문을 깨지 않고 항목을 끝에 추가하거나 다시 정렬 할 수 있습니다.

예 :

someBigTuple = (
                   0,
                   1,
                   2,
                   3,
                   4,
                   5,
                   6,
                   7,
                   8,
                   9,
                   10,
                   #...
                   10000000000,
               )

이는 튜플뿐만 아니라 다른 컬렉션 (예 : 목록 및 사전)에도 적용됩니다.


답변

후행 쉼표의 또 다른 장점은 diff를 더 멋지게 보이게한다는 것입니다. 당신이 시작했다면

a = [
    1,
    2,
    3
]

그리고 그것을

a = [
    1,
    2,
    3,
    4
]

diff는 다음과 같습니다.

 a = [
     1,
     2,
-    3
+    3,
+    4
 ]

후행 쉼표로 시작했다면

a = [
    1,
    2,
    3,
]

그런 다음 diff는

 a = [
     1,
     2,
     3,
+    4,
 ]


답변

선택 사항 입니다 . Python wiki를 참조하세요 .

요약 : 단일 요소 튜플 에는 후행 쉼표가 필요 하지만 다중 요소 튜플 의 경우 선택 사항 입니다.


답변

또한 원하는 상황을 고려하십시오.

>>> (('x','y'))*4                         # same as ('x','y')*4
('x', 'y', 'x', 'y', 'x', 'y', 'x', 'y')
#Expected = (('x', 'y'), ('x', 'y'), ('x', 'y'), ('x', 'y'))

따라서이 경우 외부 괄호는 그룹화 괄호에 지나지 않습니다. 튜플을 만들려면 뒤에 쉼표를 추가해야합니다. 즉

>>> (('x','y'),)*4
(('x', 'y'), ('x', 'y'), ('x', 'y'), ('x', 'y'))


답변

후행 쉼표는 요소가 하나 인 튜플에만 필요합니다. 더 큰 튜플에 대해 후행 쉼표를 사용하는 것은 스타일의 문제이며 필수는 아닙니다. 가장 큰 장점은 자주 수정되는 여러 줄의 대형 튜플 (예 : 구성 튜플)이있는 파일에 대한 명확한 차이입니다.


답변

그것은 간단한 대답입니다.

a = ( “s”)는 문자열입니다.

a = ( “s”,)는 하나의 요소가있는 튜플입니다.

파이썬은 문자열과 튜플을 구별하기 위해 하나의 요소 튜플의 경우 추가 쉼표가 필요합니다.

예를 들어 파이썬 콘솔에서 이것을 시도하십시오.

a = ( “s”)

a = a + (1,2,3)

역 추적 (가장 최근 호출 마지막) :

모듈의 파일 stdin, 라인 1

TypeError : ‘str’및 ‘tuple’개체를 연결할 수 없습니다.