programing

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

skycolor 2023. 10. 29. 19:08
반응형

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

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

a = ('foo',)

여러 요소가 있는 튜플은 어떻습니까?후행 쉼표가 존재하든 존재하지 않든 둘 다 유효한 것 같습니다.이거 맞는건가요?내 생각에는 뒤에 오는 쉼표가 더 편집하기 쉽습니다.코딩 스타일이 나쁜 건가요?

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

단일 항목 튜플에 대해서만 튜플이나 괄호로 둘러싸인 표현식을 정의하는 것이 필요합니다.

(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,
               )

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

빈 튜플을 제외한 모든 경우에 쉼표가 중요합니다.함수 인수 집합, 연산자 우선 순위 또는 줄 바꿈 허용 등의 다른 통사적인 이유로 필요한 경우에만 괄호가 필요합니다.

튜플, 목록 또는 함수 인수의 후행 쉼표는 특히 여러 줄로 분할된 긴 초기화가 있는 경우 좋은 스타일입니다.항상 뒤로 오는 쉼표를 포함하는 경우 끝에 다른 요소를 추가할 것으로 예상되는 다른 선을 추가하지 않고 대신 유효한 식을 만듭니다.

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

그것이 나중에 확장된 2가지 요소 목록으로 시작되었다고 가정하면 아마도 즉시 명백하지 않은 방식으로 잘못되었을 것입니다.항상 뒤로 오는 쉼표를 포함하면 해당 트랩을 피할 수 있습니다.

후행 쉼표의 또 다른 장점은 diffs를 더 멋지게 보이게 한다는 것입니다.처음부터 시작했다면.

a = [
    1,
    2,
    3
]

로 바꿨습니다.

a = [
    1,
    2,
    3,
    4
]

그 차이는 다음과 같습니다.

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

반면에 당신이 뒤로 오는 쉼표로 시작했다면,

a = [
    1,
    2,
    3,
]

그럼 다른 건 그냥

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

선택 사항: 파이썬 위키 참조.

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

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

>>> (('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",)하나의 원소를 가진 튜플입니다.

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

예를 들어 python console에서 시도해 보십시오.

a = ("s")

a  = a + (1,2,3)

Traceback (most recent call last):

File stdin, line 1, in module

TypeError: cannot concatenate 'str' and 'tuple' objects

단일 요소 튜플에 대해서만 후행 쉼표가 필요합니다.더 큰 튜플에 대한 후행 쉼표를 갖는 것은 스타일의 문제이므로 필요하지 않습니다.가장 큰 장점은 종종 수정되는 여러 줄의 큰 튜플(예: 구성 튜플)이 있는 깨끗한 diffon 파일입니다.

이것이 존재하는 또 다른 이유는 코드 생성을 하기 때문입니다.__repr__쓰기 쉬운 함수입니다.예를 들어, 만약 당신이 다음과 같이 만들어진 어떤 물체를 가지고 있다면,obj(arg1, arg2, ..., argn), 그러면 당신은 그냥 글을 쓰면 됩니다.obj.__repr__~하듯이

def __repr__(self):
    l = ['obj(']
    for arg in obj.args: # Suppose obj.args == (arg1, arg2, ..., argn)
        l.append(repr(arg))
        l.append(', ')
    l.append(')')
    return ''.join(l)

후행 쉼표가 허용되지 않으면 마지막 인수를 특수한 경우에 사용해야 합니다.실제로 목록 이해력을 사용하여 위의 내용을 한 줄로 쓸 수 있습니다(읽기 쉽도록 더 길게 적었습니다).마지막 학기에 특별한 경우를 해야 한다면 그렇게 하기가 쉽지 않을 것입니다.

PEP 8 - Python 코드 스타일 안내 - 후행 쉼표 사용 시기

한 요소로 튜플을 만들 때 필수적인 경우를 제외하고는 후행 쉼표는 일반적으로 선택 사항입니다(Python 2에서는 인쇄 문에 대한 의미론이 있습니다).명확한 설명을 위해 후자를 (기술적으로 중복된) 괄호 안에 둘러싸는 것이 좋습니다.

예:

FILES = ('setup.cfg',)

그래요, 하지만 헷갈리는군요.

FILES = 'setup.cfg',

후행 쉼표가 중복되는 경우 값, 인수 또는 가져온 항목의 목록이 시간 경과에 따라 확장될 것으로 예상되는 경우 버전 제어 시스템이 사용될 때 도움이 됩니다.패턴은 각 값(등)을 선 위에 놓고 항상 후행 쉼표를 추가하고 다음 선 위에 접괄호/괄호/괄호를 추가하는 것입니다.그러나 종결 구분자와 같은 줄에 후행 쉼표를 갖는 것은 이치에 맞지 않습니다(위의 싱글톤 튜플의 경우는 제외).

예:

FILES = [
    'setup.cfg',
    'tox.ini',
    ]
initialize(FILES,
           error=True,
           )

아니요:

FILES = ['setup.cfg', 'tox.ini',]
initialize(FILES, error=True,)

코딩 스타일은 취향입니다. 코딩 표준이 중요하다고 생각한다면 PEP-8이 있습니다.

다음 식의 결과에 대해 어떻게 생각하십니까?

x = (3)
x = (3+2)
x = 2*(3+2)

네, x는 숫자에 불과합니다.

언급URL : https://stackoverflow.com/questions/7992559/what-is-the-syntax-rule-for-having-trailing-commas-in-tuple-definitions

반응형