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


146

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

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


7
PEP 토론을 읽고 알아야합니다.
e-satis

106
들여 쓰기 수준은 1 개입니다. 1. 모두 단일 탭을 사용할 수있을 때 N 공백 사용에 동의해야한다는 것은 완전히 비논리적입니다. 그건 그렇고, 정확히 그렇게하기위한 것입니다. 톱니 모양. 한번. 1 개의 들여 쓰기 수준 = 1 개의 단일 문자, 즉 1 개의 단일 탭. 또한 각 코더가 자유롭게 시각화하는 방법을 선택할 수 있기 때문에 더 편리합니다. 공백을 사용하는 것이 멍청합니다. 나는 바보가 아닌 단일 논쟁을 본 적이 없습니다.
o0 '.

31
@BlueBomber 그리고 사람들이 원하는 글꼴 크기와 색 구성표를 사용하도록 강요하지 않는 이유는 무엇입니까? 여전히 바보입니다.
o0 '.

10
@BlueBomber 아니요, 아니요. 같은 수준의 부조리에 있습니다.
o0 '.

9
@BlueBomber 정확히 차이점은 무엇입니까? 눈에 띄는 이점을 얻지 않고 다른 개발자의 환경 구성에서 자유도를 줄입니다. 독재자가되고 모든 사람이 2 또는 4 또는 29 공백에 해당하는 들여 쓰기가있는 코드를 보도록 강제하려면 여전히 탭 으로이 작업을 수행 할 수 있습니다. Underlings에게 IDE에 원하는 공간 수에 따라 탭을 표시하도록 설정하십시오. 당신이 이것을 할 권한이 없다면, 들여 쓰기 단위가 그들의 눈에 얼마나 넓은지를 스스로 결정하게해야 할 것입니다.
Asad Saeeduddin

답변:


111

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

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

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

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

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

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

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

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

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

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


11
동의했다. 탭 대 X 공간 대 Y 공간보다 일관성이 더 중요합니다.
Mike Clark

10
왜 표준 라이브러리에 그렇게 많은 mixedCase 메소드 이름이 있습니까?
Kyle Wild

6
@ Dorkitude : a) 아무도 완벽하지 않습니다. b) 역사적 이유.

8
그렇다면 왜 많은 프로그래머들이 PEP-8 이전에 공백을 사용하기로 선택 했습니까? 그것이 내가 정말로 알고 싶은 것입니다. 탭의 장점은 나에게는 분명하지만 공백은 아닙니다.
einnocent


95

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

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

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

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

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

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

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


26
또한 키보드를 살펴보면 Tab 키의 기호가 들여 쓰기를 명확하게 나타냅니다. SPACE가 아닌 키의 들여 쓰기 목적입니다. PEP8 사용 공간으로 권장하는 것은 실수 이럴하지만 그것은 단지 추천 - en.wikipedia.org/wiki/Tab_character#Tab_characters
다니엘 Sokolowski

29
이 게시물에 전적으로 동의했습니다. 공백을 사용하는 것은 들여 쓰기 오류가 발생한 1 개의 공백에 걸려 넘어지는 것을 즐기는 사람들을위한 것입니다. 들여 쓰기가 탭 1 개로 해제 된 경우이를 알 수 있습니다.
Sepero

12
@Zingham 아무도 탭을 독점적으로 사용할 수 없습니다. 탭과 공백은 항상 함께 사용되므로 불일치가 발생합니다. 나와 다른 많은 사람들이 매일 매일 지속적으로 사용하고 있습니다. 들여 쓰기를위한 탭, 정렬을위한 공간. 정확히이 개념의 어느 부분을 이해하기가 어렵다고 생각합니까? 왜 일관성있게 적용하는 것이 불가능하다고 확신하십니까?
antred

1
탭의 실제 문제는 "# 여는 구분 기호와 일치"라는 주석 아래 동일한 PEP8에서 권장하는 문자를 정확하게 입력 할 수 없다는 것입니다. 그것은 공백을 선호하는 이유입니다. 들여 쓰기를 올바르게하십시오!
user541905

2
문제는 "파이썬 pep-8이 들여 쓰기를 위해 탭 위의 공백을 강력하게 추천하는 이유는 무엇입니까?" . 이 답변에는 PEP8에 대한 언급이 없습니다. ||| 대신 질문에 대답하기 위해 노력하는 ...이 답변이 하나 개의 거대한 생색로 나에게 우연히 만나는 주로 의견 조각. "탭이 공백보다 낫고 여기에 이유가 있습니다 ..."라고 말하는 데 사용되는 276 개의 단어가 있습니다.
Trevor Boyd Smith

43

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

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

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


3
나도 공백을 사용하도록 강요했지만 보이지 않는 문자 표시를 활성화하면 편집기 (적어도 Eclipse + PyDev) 현명한 탭이 특히 좋습니다. 탭을 시각적으로 4, 8, 6 칸으로 쉽게 설정할 수 있습니다. 따라서 내 코드에서는 적어도 개인 취향을 소중히 생각하며 기존 코드베이스에서 확립 된 규칙이라면 공백을 고수하십시오.
Daniel Sokolowski

2
팀에서 코딩하지 않는 한 괜찮습니다. 팀에 가입하면 단일 컨벤션에 동의하고이를 준수합니다.
Soviut

1
@Soviut 그것은 저에게 가장 희망적인 생각처럼 보입니다. 내가 참여했던 모든 팀에서 공식 파티 라인은 "사용 공간"이었습니다. 실제로는 거의 모든 파일이 탭과 공백으로 완전히 혼란스러워졌으며, 공백이나 탭만 지속적으로 사용하는 파일에서도 들여 쓰기는 여전히 모든 곳에서 이루어졌습니다.
21:40에

그래,하지만 그게 내 뜻이야 일부 합의에 도달하여 시행됩니다. 당신이 말했듯이, 그것은 일반적으로 "공백을 사용합니다".
Soviut

이것이 내가 탭을 선호하는 주된 이유입니다. 그것은 단지 배치와 단어의 경계 설정에 대해 별도의 문자를 가지고 의미가 있습니다
woojoo666

31

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

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

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

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


15
나는 많은 다른 사람들 (사람들, 텍스트 편집자 등)이 또한 잘못된 길로 일어났기 때문에 잘못된 길을 맹세하지 않을 것입니다. 2015 년에는 탭을 잘 처리하지 않는 텍스트 편집기가 쓰레기통에 속합니다.
13 분에 개미

2
"공백으로 잘못 될 수 없습니다. 탭으로 잘못 될 수 있습니다." 나는 100 %의 이빨-거칠게 틀린 것으로 밝혀졌다. 내 경험에 따르면 : "탭을 잘못 사용할 수 없습니다. 공백으로 잘못 할 수 있습니다"... 특히 코드를 공유 할 때.
cmroanirgo

5
그래서 누군가가 마침내 말했다 : 가장 작은 공통 분 모이기 때문에 공백을 사용하십시오. 정부 기관의 MBR, BIOS 및 종이 양식도 그대로 유지해야합니다. 이것들은 실제로 개념적 문제가 있지만 탭 대 공백은 100 % 바보 같은 사용자 문제입니다.
Milind R

1
이것은 나에게 Argumentum ad populum : 많은 또는 대부분의 사람들이 그것을 믿기 때문에 제안이 참이라고 결론 짓는 잘못된 주장으로 보인다. 모든 편집자가 탭을 공백으로 바꿀 수 있으므로 공백이 올바른 선택입니다.
Djunzu

28

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

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


43
탭이 보이지 않고 사람들이 탭 너비에 동의 할 수 없다는 것은 사실입니다. 그러나 공간에서도 마찬가지입니다. 탭과 공백을 혼합하면 문제가 발생합니다. 그러나 왜 공백이 아닌 탭에서 그 상황을 비난합니까?
Jim

47
아니요, 공백도 마찬가지입니다. 사람들은 공간의 너비에 동의 할 수 있습니다.
Rafał Dowgird

32
단일 공백의 너비는 항상 같을 수 있지만 공백의 들여 쓰기가 항상 같은 너비 인 것은 아닙니다. n 칸 너비 탭 사용에 동의하는 것이 n 칸 들여 쓰기에 동의하는 것과 어떻게 다른지 알 수 없습니다.
Jim

26
예, 두 가지를 혼합하는 데 문제가 발생할 수 있음을 알고 있습니다. 내가 이해하지 못하는 것은 일부 사람들이 탭에서 그것을 비난하는 이유입니다. 문제는 특히 탭이 아닌 혼합하는 것입니다. 탭을 공백으로 바꾸면 문제를 해결할 수 있지만 공백을 탭으로 바꾸면 문제를 해결할 수도 있습니다.
Jim

70
그리고 아니요, 8 와이드 탭을 사용하고 6 와이드 탭을 사용하고 코드를 공유하면 코드가 엉망이되지 않습니다. 그것은 모두 파이썬 인터프리터에 대한 단일 탭입니다.
Jim

22

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

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

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

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

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

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

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

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

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


3
정렬은 사소한 것입니다. 블록처럼 대괄호를 사용하고 각 인수를 들여 쓰기합니다. 또한 귀하의 예에서 인수 목록 안에 있기 때문에 공백을 사용할 수 있으며 원하는만큼 공백을 쌓을 수 있습니다.
Soviut

3
@Soviut : 공백으로 들여 쓰기하면 다른 탭 크기로 보자 마자 정렬이 엉망이됩니다. 그것을 유지하는 유일한 방법은 들여 쓰기 수준으로 탭을 사용하고 나머지 공간을 사용하는 것입니다. 즉, 공백과 탭을 혼합하여 자체 문제를 유발합니다.
Brian

그렇기 때문에 어쨌든 인수에 파이썬 들여 쓰기를 사용하는 경향이 있습니다. 물론, 그들은 열린 괄호와 일치하지 않을 수 있지만 여전히 그들이 속한 선이나 명령을 분명히합니다. JQuery 구문은 비슷한 원리로 작동합니다.
Soviut

2
@ 브라이언 : 나는 그것이 어떻게 문제를 일으키는 지 알지 못한다. 정확하게 올바른 방법, 들여 쓰기를위한 탭, 정렬을위한 공간입니다. 들여 쓰기를 위해 공백과 탭을 혼합하는 것과 전혀 다릅니다 .
antred

1
@CoreDumpError 어 아니, 확실히하지 않습니다. Python 3은 스크립트에 대해 불평하지 않기 때문에 들여 쓰기 / 공백 탭을 사용하여 모든 시간을 맞 춥니 다. 또한, PEP8은 단지 추천 (그리고 내 생각으로는 괴롭힘을당하는 것)이기 때문에 아무것도 "금지"할 수 없습니다.
41 초

12

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

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

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

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

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

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


7

이 질문에 대한 답은 PEP-8이 권장 사항을 만들고 싶을 때 공간이 더 대중적이기 때문에 탭보다 빈 공간을 강력히 추천한다는 것입니다.


PEP-8에 대한 참고 사항

PEP-8은 '들여 쓰기 수준 당 4 칸 사용' 이라고 말합니다 .
이것이 표준 권장 사항임이 분명합니다.

``엉망이 아닌 오래된 코드의 경우 8 칸 탭을 계속 사용할 수 있습니다. ''
탭을 사용할 수있는 상황이 있다는 것은 분명합니다.

'탭과 스페이스를 혼용하지 마십시오.'
이것은 혼합의 명백한 금지입니다-우리 모두 이것에 동의한다고 생각합니다. 파이썬은 이것을 감지하고 종종 질식 할 수 있습니다. -tt 인수를 사용하면 명시적인 오류가됩니다.

'파이썬을 들여 쓰는 가장 보편적 인 방법은 공백 만있는 것입니다. 두 번째로 많이 사용되는 방법은 탭만 사용하는 것입니다. '
이것은 두 가지가 모두 사용되었음을 분명히 나타냅니다. 매우 명확하게하기 위해 : 여전히 동일한 파일에서 공백과 탭을 혼합해서는 안됩니다.

'새 프로젝트의 경우 탭보다 공백 만 사용하는 것이 좋습니다.'
이것은 명확한 권장 사항이며 강력한 권장 사항이지만 탭 금지는 아닙니다.


PEP-8에서 내 질문에 대한 올바른 답변을 찾을 수 없습니다. 역사적으로 다른 언어로 사용했던 탭을 사용합니다. 파이썬은 탭을 독점적으로 사용하는 소스를 허용합니다. 그것은 나에게 충분합니다.

나는 공간을 다루는 데 갈 것이라고 생각했다. 내 편집기에서 공백을 독점적으로 사용하도록 파일 형식을 구성 했으므로 tab 키를 누르면 4 개의 공백이 삽입됩니다. 탭을 너무 여러 번 누르면 공백을 삭제해야합니다! 아아! 탭보다 4 배 많은 삭제! 내 편집자는 들여 쓰기에 4 개의 공백을 사용하고 있다고 말할 수 없으며 (편집기 가이 작업을 수행 할 수는 있지만) 한 번에 하나씩 공백을 삭제해야합니다.

파이썬은 읽기 들여 쓰기시 탭을 n 칸으로 간주한다고 말할 수 없습니까? 들여 쓰기 당 4 칸과 탭 당 4 칸에 동의하고 파이썬이 이것을 받아 들일 수 있다면 아무런 문제가 없습니다.
문제에 대한 윈-윈 솔루션을 찾아야합니다.


1
어떤 편집기를 사용하고 있습니까? 대부분의 경우 들여 쓰기 구현에 관계없이 백 스페이스에서 dedent 할 수있는 옵션이 있습니다 (예 : emacs는이 방식으로 작동합니다).
Brian

당신이 옳습니다-백 스페이스에 dedent하는 옵션이 보이지 않지만 shift-tab을 사용하여 처리하거나 들여 쓰기 (기본적으로 ctrl-shift-i)를 줄일 수 있습니다.
Brian

PyScripter를 사용하려고합니다. 탭을 누를 때 공백을 사용하고 백 스페이스를 누를 때 공백을 4에서 제거하면 더 잘로드됩니다.
quamrana

28
"공백을 삭제해야합니다! Arrgh! 탭보다 4 배 많은 삭제가 발생했습니다!" -이것이 내가 모든 것을 위해 탭을 사용하는 유일한 이유이며, 공백을 사용하는 사람들이 미쳤다고 생각하는 이유입니다. :) 공백을 사용하는 웹에서 무언가를 붙여 넣을 때를 제외하고는 문제가 없었습니다. 그런 다음 간단한 찾기-바꾸기가 문제를 해결합니다.
Aphex

3

항상 코드에서 탭을 사용했습니다. 즉, 최근에 공백을 사용해야하는 이유를 찾았습니다. Nokia N900 인터넷 태블릿에서 개발할 때 탭 키가없는 키보드가 생겼습니다. 이로 인해 탭을 복사하여 붙여 넣거나 공백으로 코드를 다시 작성해야했습니다. 다른 전화와 동일한 문제가 발생했습니다. 물론 이것은 표준 파이썬 사용이 아니라 명심해야 할 사항입니다.


2

JWZ가 가장 잘 말합니다 .

[사람들이] 코드를 읽고 새로운 코드를 작성하면 새로운 범위 (또는 sexpr 등)가 열릴 때 코드가 들여 쓰기되는 화면 열 수에 관심이 있습니다.

... 제 생각에 기술적 인 문제를 해결하는 가장 좋은 방법은 ASCII # 9 TAB 문자가 디스크 파일에 나타나지 않도록 명령하는 것입니다. 디스크에 줄을 쓰기 전에 TAB을 적절한 수의 공간으로 확장하도록 편집기를 프로그래밍하십시오. ..

... 이것은 문자열이나 문자 상수와 같이 실제로 중요한 곳에서는 탭을 사용하지 않는다고 가정하지만 절대 그렇게하지는 않습니다. 탭이 중요하다면 항상 '\ t'를 대신 사용합니다.


10
반대로 탭은 들여 쓰기에 의미 론적이므로 탭을 저장하고 공백을 표시하는 것이 더 좋습니다. 사용자는 서식 스타일을 선택할 수 있으며 편집기는 그에 따라 탭을 확장합니다.
AkiRoss

1
탭과 공백이 혼합 된 문제와 탭당 1 개의 열을 사용하고 4 번 이상 들여 쓰기를하는 한 명의 작성자가 여전히 문제를 겪고 있습니다. 텍스트 편집기에서 각 탭 문자를 4 열 너비로 표시하는 것은 열악합니다. 들여 쓰기 탭은 비례 간격 글꼴을 사용하는 워드 프로세서와 같이 가변 폭 텍스트 편집기에서 가장 의미가 있습니다. 고정 폭 텍스트 편집기로는 그리 많지 않습니다.
Mark Cidade

2
아니요, 텍스트 편집기에서 언어 문법을 구문 분석하고 테이블이 생성되는 시점을 이해할 수 있으므로 탭을 서식 지정 수단으로 만 사용할 수 있으며 들여 쓰기에 공백을 사용할 필요가 없습니다. "탭"은 고정 너비를 가질 필요는 없으며, 오늘날의 기술 (예 : 기계 학습)에서는 포맷팅이 여전히 프로그래머에게 문제가된다는 것이 부끄러운 일입니다. 모든 것이 자동화되어야하며 자동화되고 투명해야합니다.
AkiRoss

어떻게 이해할 수 있을지 모르겠습니다.
Mark Cidade

1

파이썬은 프로그램 구조를 인식하기 위해 들여 쓰기에 의존하기 때문에 식별을 식별하는 명확한 방법이 필요합니다. 이것이 공백이나 탭을 선택하는 이유입니다.

그러나 파이썬은 또한 한 가지 방법으로 만 할 수 있다는 강력한 철학을 가지고 있으므로 한 가지 들여 쓰기 방법에 대한 공식 권장 사항이 있어야합니다.

공백과 탭 모두 편집자가 들여 쓰기로 처리하는 데 고유 한 문제가 있습니다. 탭 자체의 처리는 편집기 또는 사용자 설정에서 균일하지 않습니다. 공백은 구성 할 수 없으므로 결과가 모든 곳에서 동일하게 보일 것임을 보장하므로보다 논리적으로 선택합니다.


8
또한 모든 편집자가 해당 색 구성표를 선택할 수도 있으므로 사용할 색 구성표도 지정해야한다고 생각하십니까?
o0 '.

8
예. 그러나이 불일치가 실제로 더 이해가되지 않습니까? 그것은 단순히 시각적 선호의 문제이기 때문입니다. 편집기에서 더 큰 "보이는"들여 쓰기를 선호하는 경우 탭을 8 칸으로 설정할 수 있습니다. 더 적은 것을 선호하는 경우 2로 설정할 수 있습니다. 이렇게하면 실제로 서식을 변경하지 않고 코드를 수정하는 것이 좋습니다. 그것을 관찰.
dennmat

8
dennmat에 동의합니다. 시각적으로 2 개의 공백을 선호하고 Guido가 시각적으로 4 개의 공백을 선호하는 경우 탭 들여 쓰기를 사용하는 것이 논리적 선택입니다.
Sepero

0

탭보다 공백을 알 수있는 가장 큰 장점은 많은 프로그래머와 프로젝트가 소스 코드에 대해 설정된 수의 열을 사용하고 누군가가 탭 스톱을 2 공백으로 설정하고 변경을 커밋하면 프로젝트는 4 공백을 사용한다는 것입니다 긴 줄이 다른 사람의 편집기 창에 비해 너무 길어질 수 있습니다. 탭을 사용하는 것이 더 쉽다는 데 동의하지만 공간은 협업하기가 더 쉽다고 생각합니다. 이는 Python과 같은 대규모 오픈 소스 프로젝트에서 중요합니다.


2
이것은 잘못입니다. 이것은 탭과 공백을 혼합 한 경우에만 발생하며 모든 사람이 공백 대신 탭을 사용하도록하여 동일하게 해결할 수 있습니다.
o0 '.

0

케이크를 가지고 먹을 수 있습니다. 탭을 공백으로 자동 확장하도록 편집기를 설정하십시오.

( :set expandtabVim에 있을 것 입니다.)


0

내 생각에 대부분의 Linux 텍스트 편집기는 기본값이 기본적으로 엄청나게 크게 보입니다. 탭 위에 공백을 사용해야하는 다른 좋은 이유는 생각할 수 없습니다.


-1

이미 명명 된 다른 모든 이유 (공백과 탭을 혼합하지 않는 등) 외에도 4 개의 공백 규칙에 주목해야 할 몇 가지 이유가 더 있다고 생각합니다. 이것들은 파이썬 (그리고 들여 쓰기가 의미가있는 다른 언어)에만 적용됩니다. 개별 환경 설정에 따라 다른 언어에서는 탭이 더 좋을 수 있습니다.

  1. 만약 편집기가 탭을 보여주지 않는다면 (이것은 구성에 따라 발생합니다), 다른 저자는 당신의 코드가 4 개의 공백을 사용한다고 가정 할 것입니다. 동일한 편집기의 탭 너비가 4이면 불쾌한 일이 발생할 수 있습니다. 최소한 가난한 사람은 컨벤션을 고수하여 피하기 매우 쉬운 들여 쓰기 문제로 인해 시간을 잃게됩니다. 저에게있어 가장 중요한 이유는 일관성있는 버그를 피하는 것입니다.

  2. 탭이나 스페이스 중 어느 쪽이 더 나은지에 대한 질문을 수정하면 탭의 장점이 무엇인지 묻어 야합니다. 나는 탭을 찬양하는 많은 글을 보았지만 그것들에 대한 설득력있는 주장은 거의 없었다. emacs, vi (m), kate와 같은 훌륭한 편집기는 탭이 없어도 코드의 의미에 따라 적절한 들여 쓰기를 수행합니다. 백 스페이스 등에서 들여 쓰기를하지 않도록 동일한 편집기를 쉽게 구성 할 수 있습니다.

  3. 어떤 사람들은 코드의 모양 / 레이아웃을 결정할 때 자신의 자유에 대해 매우 강한 선호를 가지고 있습니다. 다른 사람들은이 자유에 대한 일관성을 중요하게 생각합니다. 파이썬은 들여 쓰기가 블록 등에 사용되도록 지시함으로써 이러한 자유를 대폭 줄입니다. 이것은 버그 나 기능으로 보일 수 있지만, 파이썬을 선택할 때 발생합니다. 개인적으로, 나는이 일관성을 좋아합니다. 새로운 프로젝트에서 코딩을 시작할 때 적어도 레이아웃은 익숙한 것에 가깝기 때문에 읽기가 쉽습니다. 거의 언제나.

  4. 들여 쓰기에 공백을 사용하면 코드를 이해하는 데 도움이되는 "레이아웃 트릭"이 가능합니다. 이들의 일부 예는 PEP8에 열거되어 있으며; 예.

    foo = long_function_name(var_one, var_two,
                             var_three, var_four)
    
    # the same for lists
    a_long_list = [1,
                   2,
                   # ...
                   79]
    
    # or dictionaries
    a_dict = {"a_key": "a_value",
              "another_key": "another_value"}

    물론 위의 내용은 다음과 같이 훌륭하게 작성할 수 있습니다.

    foo = long_function_name(
        var_one, var_two,
        var_three, var_four)
    
    # the same for lists
    a_long_list = [
        1,
        2,
        # ...
        79]
    
    # or dictionaries
    a_dict = {
        "a_key": "a_value",
        "another_key": "another_value"}

    그러나 후자는 더 많은 코드 라인을 필요로하고 때로는 적은 라인이 더 나은 것으로 주장됩니다 (단일 화면에서 더 많은 것을 얻는다). 그러나 정렬을 좋아한다면 공백 (좋은 편집자가 선호하는 것이 좋습니다)은 탭보다 파이썬에서 더 많은 자유를줍니다. [글쎄, 일부 편집자는 탭을 사용하여 동일한 작업을 수행 할 수 있다고 생각합니다.)-공백이 있으면 모두 수행합니다 ...]

  5. PEP 8은 다른 사람들이했던 것과 같은 주장으로 되돌아 가서 공간을 지시합니다 (권장). 물론 탭만 사용하는 프로젝트에 온다면 선택의 여지가 거의 없습니다. 그러나 PEP 8 규칙이 설정 되었기 때문에 거의 모든 Python 프로그래머가이 스타일에 익숙합니다. 이렇게하면 대부분의 프로그래머가 받아 들일 수있는 스타일에 대한 합의를 찾는 것이 훨씬 쉬워집니다. 개인이 스타일에 동의하는 것은 그렇지 않으면 매우 어려울 수 있습니다.

  6. 스타일을 적용하는 데 도움이되는 도구는 일반적으로 추가 노력없이 PEP 8을 인식합니다. 좋은 이유는 아니지만, 즉시 사용할 수있는 것이 좋습니다.


-3

탭의 일반적인 문제는 탭이 다른 환경에서 다르게 표시 될 수 있다는 것입니다.
주어진 편집기에서 탭은 8 개의 공백 또는 2 일 수 있습니다.
개일 일부 편집기에서는이를 제어 할 수 있지만 다른 편집기에서는 제어 할 수 없습니다.

탭의 또 다른 문제는 인쇄 출력에 탭이 표시되는 방식입니다. 대부분의 프린터는 탭을 8 개의 공백으로 해석합니다.

공백이 있으면 의심의 여지가 없습니다. 저자가 의도 한대로 모든 것이 정렬됩니다.


14
탭을 근본적으로 잘못 이해 한 또 다른 사람은 ... 1 탭은 8 칸과 같지 않습니다! up_to_8_spaces같습니다 ! otoh : 비례 글꼴의 경우 탭이 정렬을 보장 하는 유일한 방법입니다.

3
"주어진 편집기에서 탭은 8 칸 또는 2 칸일 수 있습니다." 4 공간처럼 나와 내 친구가 8 자리 또는 2 자리 또는 3-공백이나 등을 좋아하는 경우, 우리는 (dediciated되고 있기 때문에 모두 탭에 동의 할 수 들여 쓰기 , 문자) 에디터가 그들이 무엇인지 알고이를 표시 할 수 있습니다 따라서. 4 칸 너비 들여 쓰기 코드, 8 칸 너비 들여 쓰기, 이상한 친구가 3 칸 들여 쓰기를 사용하면 모든 것이 멋집니다. 탭 너비 자체가 중요한 상황 (특히 Python!)은 공간 제안자조차 거의 가져 오지 않는 경우가 거의 없습니다.
JamesTheAwesomeDude

-4

코멘트에서 짐과 토마스 Wouters 사이의 토론에 .

문제는 ... 탭과 공백의 너비가 다를 수 있기 때문에-프로그래머가 어느 쪽의 너비에 동의 할 수 없기 때문에 탭이 비난을받는 이유는 무엇입니까?

나는 Jim이 탭 자체가 악한 것이 아니라는 점에 동의합니다. 그러나 문제가 있습니다 ...

공백으로 "MY OWN CODE"를 제어 할 수 있습니다 전 세계의 모든 편집기에서 가 표시되는 있습니다. 4 개의 공백을 사용하면 코드를 여는 편집기에 관계없이 왼쪽 여백과 같은 거리가됩니다. 탭을 사용하면 편집기의 탭 너비 설정, 심지어 내 소유 코드의 자비에 달려 있습니다. 그리고 나는 그것을 좋아하지 않습니다.

따라서 공백조차도 일관성을 보장 할 수는 없지만 탭을 통해 불가능한 OWN 코드의 모양을 더 잘 제어 할 수 있습니다.

나는 코드를 작성하는 프로그래머의 일관성이 아니라 코드를 보여주는 편집기의 일관성이 있다고 생각합니다. 공백은 쉽게 달성하고 부과합니다.


6
당신은 "편집기의 탭 너비 설정에 달려있다"? 편집기에서 원하는 탭 너비를 설정할 수없는 경우 notepad.exe를 사용 중일 수 있습니다.
user137369

4
@zigg 그 주장에 절대적으로 관련이 없다. 왜냐하면 (그녀?) 자신의 코드 에 대해 구체적으로 이야기하고 있기 때문 이다. 토론의 어디에도 관련 코드를 공유하지 않습니다.
user137369

1
편집자가 코드를 볼 수있는 유일한 도구는 아닙니다. diffs, tracebacks, Github 및 기타 웹 페이지 등이 있으므로 제어에서 일부 탭 너비를 선택합니다 (아마도 8).
RemcoGerlich

너의 의도를 알 겠어. 실제로 들여 쓰기와 관련하여 모든 사람이 내 코드를 보는 방식을 제어 할 수 있습니다. 다음 단계는 모든 사람이 코드를 보는 데 사용할 글꼴 유형과 색상을 제어하는 ​​것입니다. 그 후, 코드 편집기뿐만 아니라 세계 자체를 지배 할 준비가되었습니다 !!
Djunzu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.