[python] 파이썬 pep-8은 들여 쓰기를 위해 탭 위에 공백을 강력하게 권장하는 이유는 무엇입니까?

Stack Overflow와 PEP 8 에서 파이썬 프로그램에서 들여 쓰기에만 공백을 사용하는 것이 좋습니다. 나는 일관된 들여 쓰기의 필요성을 이해할 수 있으며 그 고통을 느꼈다.

공백이 선호되는 근본적인 이유가 있습니까? 탭을 사용하는 것이 훨씬 쉽다고 생각했을 것입니다.



답변

이에 대한 답은 PEP [ed :이 구절은 2013 년 에 편집되었다 ]에 바로 나와있다. 나는 인용한다 :

가장 인기있는 파이썬 들여 쓰기의 방법은 공백입니다.

다른 근본적인 이유가 필요하십니까?

덜 둔하게 말하면 : 첫 번째 단락에 명시된 PEP의 범위도 고려하십시오.

이 문서는 기본 Python 배포판에 표준 라이브러리를 포함하는 Python 코드에 대한 코딩 규칙을 제공합니다.

의도는 공식 파이썬 배포판에 들어가는 모든 코드를 일관된 형식으로 만드는 것입니다 (이것이 보편적으로 Good Thing ™이라는 데 동의 할 수 있기를 바랍니다).

개별 프로그래머를위한 공간과 탭 사이의 결정은 a) 실제로 맛의 문제이며 b) 기술적 수단 (편집자, 변환 스크립트 등)으로 쉽게 처리되므로 모든 토론을 끝내는 명확한 방법이 있습니다. .

귀도는 하나를 선택했습니다. 그는 이유를 제시 할 필요조차 없었지만, 여전히 경험적 데이터를 참조하여 수행했습니다.

다른 모든 목적을 위해이 PEP를 권장 사항으로 사용하거나 선택, 팀 또는 팀 리더를 무시할 수 있습니다.

그러나 한 가지 조언을 드리겠습니다 : 혼합하지 마십시오 😉 [ed : 탭과 공백 혼합은 더 이상 옵션이 아닙니다.]


답변

글쎄, 모두가 공간을 향해 강하게 편향되어있는 것 같습니다. 나는 탭을 독점적으로 사용합니다. 왜 그런지 잘 압니다.

탭은 실제로 공백 이후 에 나온 멋진 발명품 입니다. 그것은 공간을 수백만 번 밀거나 가짜 탭 (공백을 생성)을 사용하지 않고 들여 쓰기를 허용합니다.

왜 모든 사람이 탭 사용을 차별하는지 모르겠습니다. 젊은이들이 새로운보다 효율적인 기술을 선택하고 펄스 다이얼링 이 멋진 새로운 기술뿐만 아니라 모든 전화기 에서 작동한다고 불평하는 것은 젊은이들을 차별하는 것과 매우 흡사 합니다. “전화 걸기 기능이 모든 전화에서 작동하지는 않기 때문에 전화가 잘못되었습니다.”

편집기가 탭을 올바르게 처리 할 수 ​​없습니까? 글쎄, 현대 편집자를 얻으십시오 . 우리는 이제 21 세기에 왔고 편집자가 첨단 기술이었던 복잡한 소프트웨어 조각이었던 시간은 오래되었습니다. 우리는 이제 엄청나게 많은 탭을 선택할 수있는 많은 편집자를 보유하고 있습니다. 또한 공백으로는 할 수없는 탭의 양을 정의 할 수 있습니다. 탭이 보이지 않습니까? 그 주장에 대해 무엇입니까? 글쎄, 당신은 공백도 볼 수 없습니다!

더 나은 편집자를 제안하기 위해 너무 대담 할 수 있습니까? 이미 10 년 전에 출시 된이 첨단 기술 중 하나는 보이지 않는 문자표시 합니까? (비열한)

공백을 사용하면 삭제 및 서식 작업이 훨씬 더 많이 발생합니다. 그렇기 때문에 (그리고 이것을 알고 동의하는 다른 모든 사람들이) 파이썬 탭을 사용하는 것입니다.

탭과 공백을 혼합하는 것은 그에 대한 논쟁이 아닙니다. 그것은 엉망이며 결코 작동하지 않습니다.


답변

나는 개인적으로 탭 위의 공백에 동의하지 않습니다. 나에게 탭은 문서 레이아웃 문자 / 메커니즘이며 공백은 코드의 경우 명령 사이의 내용 또는 묘사를위한 것입니다.

탭이 실제로 문제가 아니라 사람과 탭과 공백을 혼합하려는 방법에 대한 Jim의 의견에 동의해야합니다.

즉, 나는 컨벤션을 위해 공간을 사용하도록 강요했다. 개인 취향보다 일관성을 중요하게 생각합니다.


답변

공백이있는 이유는 탭이 선택 사항이기 때문입니다. 공백은 문장 부호에서 실제로 가장 낮은 공통 분모입니다.

모든 괜찮은 텍스트 편집기에는 “공백으로 탭 바꾸기”가 있으며 많은 사람들이 이것을 사용합니다. 그러나 항상 그런 것은 아닙니다.

일부 텍스트 편집기는 공백을 탭으로 대체 할 수 있지만 실제로는 드 rare니다.

결론 . 공백으로 잘못 갈 수는 없습니다. 탭이 잘못되었을 수 있습니다 . 따라서 탭을 사용하지 말고 실수의 위험을 줄이십시오.


답변

탭의 문제점은 보이지 않으며 사람들은 탭 너비에 동의 할 수 없다는 것입니다. 탭과 공백을 혼합하고 Python 이외의 다른 곳에서 tabstops를 설정하면 (8 개의 공백마다 tabstops를 사용함) Python이 보는 것과 다른 레이아웃으로 코드가 표시됩니다. 레이아웃에 따라 블록이 결정되므로 다른 논리가 표시됩니다. 그것은 미묘한 버그로 이어집니다.

PEP 8을 무시하고 탭을 사용하거나 더 나쁜 경우 탭과 공백을 혼합해야한다고 주장하는 경우 적어도 ‘-tt’인수로 파이썬을 실행하여 일관성없는 들여 쓰기 를 만듭니다 (때로는 탭, 때로는 같은 들여 쓰기 공간) 수준) 오류. 또한 가능하면 편집기가 탭을 다르게 표시하도록 설정하십시오. 그러나 실제로 가장 좋은 방법은 탭, 마침표를 사용하지 않는 것입니다.


답변

들여 쓰기와 관련된 주요 문제는 탭과 공백을 혼합 할 때 발생합니다. 분명히 이것은 당신이 어떤 것을 선택해야하는지 알려주지 않지만, 동전을 뒤집어서 선택하더라도 추천하는 것이 좋습니다.

그러나 IMHO는 탭보다 공백을 선호하는 몇 가지 사소한 이유가 있습니다.

  • 다른 도구. 때로는 코드가 프로그래머의 편집기 외부에 표시됩니다. 예 : 뉴스 그룹 또는 포럼에 게시되었습니다. 스페이스는 일반적으로 탭보다 낫습니다. 스페이스는 엉망이되고 탭도 마찬가지이지만 그 반대도 아닙니다.

  • 프로그래머는 소스를 다르게 본다. 이것은 매우 주관적입니다-탭의 주요 이점 또는 사용중인 측면에 따라 탭을 피하는 이유입니다. 또한 개발자는 선호하는 들여 쓰기를 사용하여 소스를 볼 수 있으므로 2 칸 들여 쓰기를 선호하는 개발자는 동일한 소스에서 8 칸 개발자와 작업하고 원하는대로 볼 수 있습니다. 단점은 이것에 대한 영향이 있다는 것입니다. 8 공간과 같은 일부 사람들은 너무 깊게 중첩되어 매우 눈에 띄는 피드백을 제공하기 때문에 2 인 덴터가 코드를 지속적으로 편집기에 배치하여 볼 수 있습니다. 모든 개발자가 동일한 방식으로 코드를 볼 수있게하면보다 일관성있는 wrt 줄 길이 및 기타 문제가 발생합니다.

  • 줄 들여 쓰기 계속. 때로는 이전 줄에서 나왔음을 나타내는 줄을 들여 쓰기를 원할 수도 있습니다. 예.

    def foo():
        x = some_function_with_lots_of_args(foo, bar, baz,
                                            xyzzy, blah)

    탭을 사용하는 경우 공백과 탭을 혼합하지 않고 편집기에서 다른 탭 정지를 사용하는 사람들을 위해 이것을 정렬 할 수있는 방법이 없습니다. 이것은 위의 이점을 효과적으로 없애줍니다.

그러나 이것은 매우 종교적인 문제이며, 프로그래밍에는 어려움이 있습니다. 가장 중요한 문제는 선호하는 것이 아닌 경우에도 하나를 선택해야한다는 것입니다. 때로는 중요한 들여 쓰기의 가장 큰 장점은 적어도 우리가 중괄호 배치 화염을 피할 수 있다는 것입니다.

또한 가치가 독서는 문제에 대한 제이미 자윈 스키에 의한 문서.


답변

탭을 사용하면 PEP 8의 또 다른 측면이 혼동됩니다.

모든 줄을 최대 79 자로 제한하십시오.

가설 적으로 탭 너비 2를 사용하고 탭 너비 8을 사용한다고 가정합니다. 가장 긴 줄이 79 자에 도달하도록 모든 코드를 작성한 다음 파일 작업을 시작합니다. 이제 PEP 상태로 인해 읽기 어려운 코드가 있습니다.

대부분의 도구에서 기본 줄 바꿈은 코드의 시각적 구조를 방해합니다.

모두 4 개의 공백을 사용하면 항상 동일합니다. 편집자가 80 자 너비를 지원할 수 있으면 누구나 코드를 편안하게 읽을 수 있습니다. 참고 : 80 자 제한은 그 자체로 거룩한 전쟁이므로 시작하지 마십시오.

sucky가 아닌 편집기에는 공백과 같은 탭을 삽입하고 삭제하는 것처럼 공백을 사용할 수있는 옵션이 있어야하므로 실제로 유효한 인수가 아니어야합니다.