Programming

파이썬 프로그래밍에서 탭과 공백

procodes 2020. 3. 3. 23:07
반응형

파이썬 프로그래밍에서 탭과 공백


파이썬 프로그래밍을 할 때 항상 들여 쓰기에 탭을 사용했습니다. 그러나 나는 여기서 대부분의 Python 프로그래머가 탭 대신 공백을 사용하여 편집기 간 오류를 최소화한다고 지적한 SO에 대한 질문을 보았습니다.

어떻게 다른 점이 있습니까? 파이썬의 탭 대신 공백을 사용하는 다른 이유가 있습니까? 아니면 단순히 사실이 아닌가?

편집기 대신 탭 대신 공백을 삽입하거나 예전처럼 계속 진행해야합니까?


때문에 PEP-8은 우리에게 공간을 사용합니다.


들여 쓰기 오타 (8 공백? 아니오, 7 oops 9 ...) 후 쫓는 것에 지쳤습니다. 나는 소스를 '탭 전용'으로 전환했습니다.

1 탭 == 1 들여 쓰기 레벨, 완전 정지

요점은 : 들여 쓰기를 4, 8 또는 pi / 12 문자 너비로 표시하려면 텍스트 편집기에서 설정을 변경하고 코드를 망칠 필요는 없습니다.

(개인적으로 4 문자 너비 탭을 사용하지만 일부는 3 또는 8 공백을 선호하거나 가변 너비 글꼴을 사용합니다.)


그리하여 주 께서 말씀하셨습니다. 네 공간으로 들여 쓰기하십시오. 그 이상도 이하도 아닌. 들여 쓰기 할 공간의 수는 4 개이며 들여 쓰기의 수는 4 개입니다. 네가 들여 쓰기를하지 말고 두 개를 들여 쓰지 마라. 탭이 바로 있습니다. -게오르그 브랜들


탭 문자를 표시하는 편집기를 사용하십시오 (문제에 대한 모든 공백). 기사를 쓰지 않고 프로그래밍 중입니다.

탭을 사용합니다. 탭에 한 칸의 공백이있을 여지가 없습니다 (볼 수있는 경우). 문제는 사람들이 다른 편집기를 사용한다는 것이며, 세계에서 가장 일반적인 것은 위와 같이 tab == indent입니다. 일부 블로킹은 탭 키가 잘못된 수의 공간으로 설정되거나 수동으로 수행되어 엉망이됩니다. 탭하고 실제 편집기를 사용하십시오. (이것은 PEP와 반대되는 것이 아니라 C / C ++ 및 기타 공백과 무관 한 언어에 관한 것입니다).

soapbox에서 / steps


공백에 탭을 사용하는 주요 이유는 백 스페이스 키입니다. 만약 내가 한 줄에 있고 그 한 줄의 들여 쓰기를 제거하려면 백 스페이스 4x를 띄워야합니다. 반면 탭이라면 한 번만 누르면됩니다.

이전에 언급했듯이 탭을 공백으로 변환하는 것이 더 쉽지만 다른 방법은 아니기 때문에 계속 탭을 사용합니다.

공백이있는 코드를 탭이있는 코드로 변환하는 간단한 프로그램을 작성하려고합니다. 공백이 공백이기 때문입니다. 그들은 나를 벽으로 몰고 갔다!

오! 그리고 화살표 키를 사용하여 왼쪽과 오른쪽을 탐색하는 것은 공간이있을 때 항상 엉덩이에 고통입니다.

업데이트 : Sublime Text 3는 이제 백 스페이스 키를 사용하여 전체 소프트 탭을 삭제합니다. 그러나 화살표 키 탐색은 여전히 ​​지루합니다.

들여 쓰기를위한 탭과 공백

업데이트 : 이제 vscode를 사용 하고 백 스페이스, 삭제 및 화살표 키 탐색을 해결하기 위해 TabSanity 확장 을 작성했습니다.

TabSanity 확장 기능


가장 "pythonic"방식은 들여 쓰기 레벨 당 4 개의 공백을 사용하는 것입니다. 그러나 파이썬 인터프리터는 공백이나 탭을 인식합니다. 유일한 단점은 공백과 탭을 섞어서는 안된다는 것 입니다. 즉, 사양은 공백을 권장하고 대부분의 개발자는 공백을 사용하므로 실제로 정당한 이유가 없으면 공백을 사용하십시오.


내가 알 수있는 한 탭 대 공백의 장단점이 있습니다.

탭의 장점 :

  • 들여 쓰기, 들여 쓰기 및 들여 쓰기를 통과하는 데 필요한 키 입력이 적습니다. (IDE에 공백 들여 쓰기 영리함이 있더라도 탭만큼 좋은 것은 아닙니다.)
  • 다른 프로그래머는 원하는대로 다른 탭 디스플레이 크기를 사용할 수 있습니다.
  • 커서는 들여 쓰기 문자를 "내부"로 가질 수 없습니다. 예를 들어, 일부 줄을 복사한다고 가정하면 탭을 사용하여 줄의 시작 부분 근처를 모호하게 클릭하여 선택을 시작하면 첫 번째 탭을 모두 얻을 수 있습니다. 공백이 있으면 공백과 여백 사이의 작은 대상을 치지 않으면 첫 번째 공백 문자를 놓칠 수 있습니다. 마찬가지로 줄에서 들여 쓰기를 제거하기 위해 커서가 네 칸 들여 쓰기 문자의 가운데에 있으면 대부분의 편집자는 백 스페이스 누르기를 잘 처리하지 못합니다. 일반적으로 하나의 공간을 제거합니다. 탭을 사용하면 예상대로 작동합니다.
  • 다른 언어와의 일관성이 있으므로 C ++ / Java 용 탭 및 Python 용 공간과 같이 편집기를 사용하도록 설정할 필요가 없습니다.
  • 잘못된 들여 쓰기가 더 명확 할 수 있습니다 (예 : 추가 탭이 추가 공간보다 훨씬 큼).

탭의 단점 :

  • 대부분의 Python 프로그래머는 공백을 사용하므로 규칙에 위배됩니다.
  • 탭을 사용하는 것보다 공백을 사용하여 여러 줄 문장을 정렬하는 것이 더 쉽습니다. 당신은 할 수 탭를 위해 들여 쓰기 공백를 위해 정렬을 사용하지만, 파이썬에서 조금 위험한 것 같습니다!

어떤 사람들에 의해 과장된 비 문제가 있습니다 :

  1. 탭 들여 쓰기에 미묘한 공백이 생길 수 있습니다. 사실상 모든 IDE / 편집기는 공백 시각화를 지원하며 거의 공백 들여 쓰기에 미미한 탭이 생길 것입니다! 어쨌든 이것이 일반적인 오류라는 것을 알 수 없습니다. 게다가, 대부분의 들여 쓰기 오류는 파이썬에 의해 잡히고, 좋은 IDE는 다른 들여 쓰기를 강조 할 수 있어야합니다.

  2. 탭으로 물건을 쉽게 정렬 할 수는 없습니다 : 문자 완전 정렬을 원한다면 이것은 사실이지만 PEP-8은 이것에 대해 권장하지 않으며 파이썬은 여러 줄 문장으로 잘 작동하지 않습니다.

  3. 사람들은 편집기에서 탭 표시 크기에 대한 설정이 다르므로 코드가 다른 위치에서 다르게 보일 수 있습니다. 예, 실제로 탭의 유용한 기능입니다.

다른 파이썬 코드와 일관성을 유지하기 위해 공백을 사용하기 시작했지만 솔직히 말하면 탭으로 다시 바꿀 정도로 실망 스럽습니다. 많은 것은 IDE의 기능에 달려 있지만 내 경험상 공간 들여 쓰기에 대한 IDE 지원은 탭을 사용하는 것만 큼 좋습니다.

그래서 당신이하지 않으면 정말 함께있는 일관성 좋아하지 않아 대부분 (아마도 모든!) 파이썬 코드를 사용 탭과 (사용 가능한 경우) 강조 공백 시각화 및 들여 쓰기를 켭니다. 나를위한 가장 큰 이유는 선택의 용이성과 키 스트로크의 (상당히 IMO) 감소 때문입니다. 일부 규칙은 바보입니다.

업데이트 : 전 세계에 들여 쓰기로 공백을 올바르게 지원하는 편집기 (Vim과 같은 넌센스 제외)가 있음을 발견했습니다. "원자 탭 스톱"이라는 옵션이있어 4 개의 공백이 마치 모든면에서 탭처럼 동작합니다 (크기를 조정할 수는 없습니다). 슬프게도 Atom은 느리고 부풀어 오른 편집기이지만 훌륭한 기능이며 공백을 사용해야하는 경우 좋은 옵션 일 수 있습니다. 언젠가 다른 편집자들이 그것을 지원하기 시작할 것입니다. VSCode의 문제는 다음과 같습니다 .


최근에 Python : Myths about Indentation 이라는 제목의 기사 를 보았습니다 . 이 기사에는 Python 코드를 작성할 때 공백 사용을 권장해야하는 충분한 이유가 있지만 확실히 동의 할 여지가 없습니다.

필자는 대부분의 파이썬 프로그래머가 공백 만 사용하는 것이 사실이라고 생각합니다.


\ t 문자를 삽입하는 대신 Tab 키를 누를 때 탭 스톱까지 공백을 삽입 할 수있는 편집기를 사용하십시오. 그리고 잊어 버리세요.


탭과 공백을 혼합 할 수 있습니다 ... 그러나 탭은 8 개의 공백과 동일한 들여 쓰기로 간주되므로 편집기가 탭을 혼합 할 때 문제가되는 8 개의 공백으로 간주되도록 설정하지 않는 한.


역사적인 컨벤션이 무엇이든 탭은 더 나은 선택이며 미래의 모든 Python 코드 줄에서 공백을 대체해야한다고 강력하게 느낍니다. 무능한 폭군을 쫓아내는 것처럼. 이에 대한 나의 이론적 근거는 다음과 같다 : 핵심 가치로서의 단순성 . 하나의 의미 작업에 두 개 또는 네 개의 문자를 사용 하시겠습니까? 전통을 넘어선 정당성은 없습니다. IMO.


탭 대신 공백을 사용할 때 발생하는 유일한 불편은 들여 쓰기 수준을 쉽게 제거 할 수 없다는 것입니다. 하나의 탭 대신 네 개의 공백을 제거해야합니다.


탭 규칙. 중첩 루프에 대해 동일한 인수를 사용하면 외부 루프를 "back"1 레벨로 가져 오려고합니다. 팁 : 오래된 공백으로 가득 찬 파이썬 코드를 탭으로 변환하려면 http://www.textpad.com/add-ons/ 에서 실행 파일로 제공되는 TabOut 유틸리티를 사용 하십시오 .


파일 내에서 들여 쓰기혼합되어 있으면 편집기 간 오류가 발생 합니다 . 코드 블록은 4 개의 공백으로 들여 쓰기되고 하나의 들여 쓰기 레벨 "in"은 탭으로 들여 쓰기됩니다. 이제이 작업을 수행 한 이방인 (탭과 공백을 혼합)은 탭이 4 칸이므로 문제가 없으며 Python은 문제가 없습니다.

이제 피해자가 나중에 와서 탭을 8 칸으로 설정했습니다. 이제 우리의 피해자는 코드가 모두 구타보고, 생각하고 수정을 하여 들여 쓰기 한 단계 제거 이제 코드를 만들고, 보기 좋아 아직도 들여 쓰기 2 개 수준입니다,하지만입니다 정말 한 수준 . 이 시점에서 모든 지옥은 풀려납니다.

여기서 교훈은 탭과 공백을 절대로 섞어서는 안된다는 것입니다. 이를 유지하면 개인적으로 사용하는 것과 상관없이 코드를 공백이나 탭으로 쉽게 다시 들여 쓸 수 있습니다. 당신은 탭과 공백을 혼합하지 않도록하는 가장 좋은 방법은 항상 실행하는 것입니다 python함께 -tt탭과 공백을 혼합 할 때 오류가 발생 것이다.

탭과 공백에 대해서는 개인적으로 탭을 사용하여 들여 쓰기를 외형과 구분합니다. 공백보다 탭으로 들여 쓰기 할 때 코드 모양을 변경하는 것이 훨씬 쉽습니다. 필자는 이것이 99 %의 파이썬 프로그래머가하는 것과 상반되는 것을 알고 있지만 이것이 개인적 선호이며, 탭 파일을 간격이있는 파일로 쉽게 변환 할 수 있습니다. 실수로 문자열 등에서 4 개의 공백을 제거 할 수 있기 때문에 그 반대는 항상 사실이 아닙니다.


파이썬을 처음 배웠을 때, 사용하는 대부분의 언어는 융통성이 없기 때문에 상당한 공백이라는 생각으로 조금 벗어났습니다. 즉, 다양한 들여 쓰기 스타일을 이해하는 Python의 능력에 깊은 인상을 받았습니다. 새 프로젝트에 어떤 스타일을 사용할지 고려할 때 두 가지 사항을 명심해야합니다.

  1. 첫째, 파이썬이 들여 쓰기를 해석하는 방법을 이해하는 것이 중요합니다. Bryan Oakley는 탭을 사용할 때 일대일 오류가 발생할 수 있다고 언급했지만 실제로는 기본 인터프리터 설정으로는 불가능합니다. 이의 더 나은 설명이 학습 파이썬 에서, 오라일리 미디어 .

기본적으로 탭 너비를 정의하는 변수 (소스 파일 # tab-width :의 맨 위에 주석을 포함하여 변경할 수 있음)가 있습니다. 파이썬이 탭을 만나면 탭 배수의 다음 배수로 들여 쓰기 거리 증가합니다 . 따라서 파일 왼쪽에 공백과 그 뒤에 탭이 입력되면 탭 너비의 다음 배수는 8입니다. 탭 자체가 입력되면 같은 일이 발생합니다.

이런 식으로 편집기가 올바르게 구성된 경우 탭을 사용하고 탭과 공백을 혼합해도 안전합니다. 편집기의 탭을 Python 탭 너비 선언과 동일한 너비 (또는없는 경우 8)로 설정하면됩니다. 파일에서 탭 너비를 지정하지 않는 한 탭 너비가 8 칸이 아닌 편집기를 사용하는 것은 일반적으로 좋지 않습니다.

  1. 둘째, 파이썬의 구문 디자인의 많은 부분은 동일한 프로젝트에서 프로그래머들 사이에서 코드 가독성과 일관된 스타일을 장려하는 것입니다. 즉, 특정 프로젝트에 대한 질문은 프로젝트에서 일하는 사람들 이 코드를 가장 읽기 쉽게 만드는 것입니다 . 일관된 들여 쓰기 스타일을 유지하는 것이 좋지만 프로젝트에서 사용하는 플랫폼과 편집기에 따라 다른 스타일이 다른 프로젝트에 적합 할 수 있습니다. PEP 8을 따르지 않을 강력한 이유가 없다면 , 사람들이 기대하는 것에 따르기 때문에 그렇게하는 것이 합리적입니다.

여러 탭과 공백을 성공적으로 사용하는 프로젝트가 발생했습니다. 기본적으로 공백은 작은 섹션을 들여 쓰는 데 사용되며, 들여 쓰기 된 섹션에 있다는 사실은 상대적으로 중요하지 않습니다. 탭은 큰 구조적 특징에 대한 독자의 관심을 끌기 위해 사용됩니다. 예를 들어 클래스는 탭으로 시작하며, 함수 내부의 간단한 조건부 검사는 두 개의 공백을 사용합니다.

탭은 여러 수준으로 들여 쓰기 된 큰 텍스트 블록을 처리 할 때도 유용합니다. 들여 쓰기 수준을 3-4 수준에서 떨어 뜨리면 적절한 공간 수만큼 정렬하는 것보다 적절한 탭을 정렬하는 것이 훨씬 쉽습니다. 프로젝트에서 PEP 8 권장 스타일을 사용하지 않는 경우 들여 쓰기 패턴이 일관되게 유지되고 다른 사람들이 편집기를 구성하는 방법을 명시 적으로 읽을 수 있도록 스타일 가이드를 파일 어딘가에 작성하는 것이 가장 좋습니다.

또한 Python 2.x에는 -t혼합 탭과 공백에 대한 경고 -tt를 발행하고 오류를 발생시키는 옵션 있습니다. 이것은 동일한 범위 내의 혼합 탭과 공백에만 적용됩니다. 파이썬 3은 -tt내가 찾은 한 그 검사를 비활성화 할 수있는 방법이 없다고 가정합니다 .


들여 쓰기해야하는 코드의 양에 대해서는 각기 다른 환경 설정이 있습니다. 누군가와 코드를 공유하고 들여 쓰기와 관련하여 다른 환경 설정이 있다고 가정 해 봅시다. 들여 쓰기가 탭에 있으면 친구는 항상 편집기 설정에서 탭 너비를 변경할 수 있습니다. 그러나 들여 쓰기가 공백에 있으면 친구가 원하는대로 소스 코드를 설정하려는 경우 실제로 소스 코드를 변경해야합니다. 그런 다음 친구의 변경 사항을 받으면 다시 원하는대로 변경할 수 있습니다. 이 경우 들여 쓰기 수준이 바뀌는 지루한 상황을 처리하거나 들여 쓰기 수준에서 다른 사람의 선호도를 채택해야합니다. 나와 친구 모두 탭을 사용하는 경우 선호도가 다른 사실은 중요하지 않습니다. 코드가 변경되지 않고 서로 다른 들여 쓰기 수준을 볼 수 있습니다. 그렇기 때문에 모든 프로그래밍 언어에서 탭이 들여 쓰기 공간보다 낫습니다.


나는 주로 C ++ 프로그래머이지만 때로는 내 프로젝트에 소량의 Python이 포함되어 있습니다. 탭을 사용하여 C ++ 코드를 들여 씁니다. 이것은 여기에 세 가지 옵션이 있음을 의미합니다.

  1. C ++에서 탭을 사용하고 Python에서 공백을 사용하십시오. 이를 통해 C ++ 파일을 그대로 유지하고 PEP-8 권장 사항을 따르지만 프로젝트 내에서 일관성이 없습니다.
  2. 공백을 사용하도록 C ++ 코드를 변경하십시오. 이를 통해 프로젝트 내 모든 파일의 일관성을 유지할 수 있으며 PEP-8 권장 사항을 따르지만 돌아가서 모든 C ++ 파일을 변경해야합니다. 탭을 선호하기 때문에 이것을 나쁜 것으로 생각합니다.
  3. 내 C ++ 코드와 Python 코드에서 탭을 사용하십시오. 이렇게하면 전체 프로젝트가 일관되고 선호하는 들여 쓰기 스타일 인 탭을 사용할 수 있습니다. 단점은 PEP-8 표준을 따르지 않는다는 것입니다.

내 프로젝트의 경우 일반적으로 옵션 3을 사용합니다.


경험과 PEP-8 은 혼합 공간과 TABs를 피해야 한다고 분명히 결론을 내립니다 . 그것들을 혼합하려면 IDE에서 공백을 시각화해야하지만 범위를 쉽게 볼 수 있도록 파이썬의 들여 쓰기의 이점을 잃어 버립니다. IDE에서 공백을 시각화하면 디스플레이가 복잡해집니다.

TAB 또는 공백 인 경우 간단한 이유로 공백이어야합니다. 탭을 공백으로 자동 대체하기 위해 거의 모든 IDE 및 텍스트 편집기를 전환 할 수 있지만 그 반대는 아닙니다.

행의 선행 공백을 탭으로 자동 변환 할 수있는 IDE가 있지만 결국에는 탭과 공백이 혼합됩니다. 매개 변수가 많은 함수 호출 또는 doc 문자열과 같은 여러 줄 명령문을 고려하십시오. "아스키 아트 (ascii-art)"도 피해야하지만 선행 탭 이후에 단일 공간이 남는 것은 우연히 발생할 수 있습니다.

다른 답변은 탭에 찬성하여 몇 가지 주장을 가져 왔습니다.

  • 타격 TAB이 더 효율적입니다. 물론 이것은 사실이지만 모든 텍스트 편집기를 사용하면 탭 키를 누를 때 원하는 수의 공백을 즉시 삽입 할 수 있습니다
  • 2/3/4/8 공백 대신 탭 하나만 제거하면 들여 쓰기 / 들어 쓰기가 더 쉽습니다. 그러나 대부분의 텍스트 편집기는 어쨌든 자동으로이를 수행 할 수 있습니다. 블록 선택, 들여 쓰기 / 들여 쓰기는 주석 달기 / 주석 해제와 같은 프로그래밍 편집기의 기본 기능입니다. 텍스트 에디터가 이것을 구현하지 않았다면, 최소한 같은 기능을 수행 할 수있는 매크로 기능을 사용하기 쉬워야합니다.
  • 다른 들여 쓰기 너비와 같은 다른 프로그래머. 그것은 사실이며 TABs 만 사용하는 것이 분명 합니다. 문제는 다른 개인 및 / 또는 팀과의 상호 작용입니다. 이것이 현실 세계에서 작동하기 위해서는 모든 사람이 사용하는 모든 것에 동의해야 TAB합니다. 이 일이 발생하지 않았으므로 어쨌든 작동하지 않습니다. 실제 시나리오에는 프로젝트가 어쨌든 동의하는 일련의 코딩 지침이 있으며 들여 쓰기 방법은 분명히 그 중 하나입니다. 시각적 수준에서 의미가 "전용"인 다른 프로그래밍 언어에서도 마찬가지입니다.

여기에 대부분 (아직은 아니지만) 답변이 누락 된 주요 지점 인 Imho는 특히 참가자 목록을 처음에 모르는 시나리오에서 팀 또는 개인 간의 상호 작용입니다. 코드가 코드를 충족하면 모두 탭을 사용하거나 공백을 사용해야합니다. 결국 기능 문제가 발생하지 않으면 혼합 될 수 없습니다. 사람들은 완벽하지 않습니다. 도구가 완벽하지 않습니다. 그래서 imho를 사용해서는 안됩니다 TAB.

그렉이 이미 답변에서 제공 한 링크가 없으면 아무런 대답도 없습니다 : Python : 들여 쓰기에 대한 신화


탭이 작동하지 않는 시나리오가 있습니다. 즉, 사용하는 코딩 스타일에 따라 일부 코드 줄을 한 칸의 정확도로 들여 쓰기해야 할 수도 있습니다.

def foobar():
    x = some_call(arg1,
                  arg2)

이 경우 순수한 탭을 사용하면 전혀 작동하지 않습니다. 주 들여 쓰기에 탭을 사용하고 하위 들여 쓰기에 공백을 사용하면 작동하지만 둘을 혼합하지 않는 어려운 규칙에 위배됩니다.

그러나 위 코드 예제와 같은 상황을 피하는 코딩 스타일 / 컨벤션 문서를 사용할 때는 그렇지 않습니다.


탭 대신 공백을 사용할 때의 문제는 파일 크기가 엄청나게 커진다는 것입니다. 예를 들어, 탭의 공백을 바꿀 때 500KB의 공백 들여 쓰기 파일이 200KB로 줄어들 수 있기 때문에 항상 탭을 사용합니다.

파일 크기가 작을수록 로딩, 컴파일, 실행 (일부 경우) 등이 빨라집니다.

나에게 공백을 사용할 필요는 없지만 누군가 탭에 문제가있는 편집기를 사용하는 경우 "\ t"를 ""또는 ""로 바꾸거나 다른 것을 사용할 수 있습니다 ...


이미 나열된 모든 주장 외에도, 나는 이것이 들여 쓰기에 관한 신화 에서 상당히 중요하다는 것을 알았습니다 .

또한 복사 및 붙여 넣기 작업 중 또는 웹 페이지 또는 다른 종류의 마크 업 코드에 소스 코드를 삽입 할 때 탭이 손상되거나 잘못 변환되는 경우가 종종 있습니다.

탭에 대한 또 다른 논거 (강력한 환경 별)는 전화 키보드에서 때로는 누락 된다는 것 입니다. 가능한 경우 대체 키보드를 설치하면이 문제를 해결할 수 있습니다.

인수 에 대해 아직 아무도 언급 한 것 같았다 탭은 4 개 공간은 4 자 (파일에서 4 회가 0x20, 4 바이트) 동안 1 개 탭, 1 개 문자 (은 0x09, 파일의 1 바이트)라는 것이다; 따라서 공백을 사용하면 4 배의 공간 낭비가 발생합니다.

이 일관성없는 논증 목록을 결론 짓기 위해, 이슈 7012 : 탭이 들여 쓰기 공간보다 낫습니다 .

파이썬 "공간 만"표준은 분산 코드를위한 것입니다. 수년간의 초기 경험으로 인해 탭이 공유 코드 에 끝없는 문제를 일으킨다는 의심의 여지가 없었습니다 (...)


어떻게 다른 점이 있습니까?

일부 편집기는 기본적으로 단일 탭 문자를 설정된 수의 공백 문자로 바꾸도록 구성되지만 일부 문자는 그렇지 않습니다. 모두 공백을 사용하는 경우 기본 편집기 설정의이 차이를 무시할 수 있습니다.

파이썬의 탭 대신 공백을 사용하는 다른 이유가 있습니까? 아니면 단순히 사실이 아닌가?

그렇습니다. 나 앞에 많은 대답이 지적한 다른 유효한 이유가 있습니다. 그러나 "PEP-8"은 그러한 이유 중 하나가 아니라고 말합니다. 이것은 PEP-8이 모든 Python 코드 의 코딩 표준 이며 실제로 표준 Python 라이브러리 세트의 코딩 표준 일 뿐이라는 자체 영속적 인 신화에서 비롯됩니다 . 일부는 PEP-8이 널리 채택되었다고 주장하고 일부는 대부분의 Python 프로그래머가 탭 대신 공백을 사용한다고 주장합니다. 이 사이트의 투표 수에 대중이 선호하는 탭이 명확하게 표시되어 있기 때문에 이러한 주장에 대한 증거를 요청하고 싶습니다. 실제로 공간과 탭의 상대적인 장단점을 실제로 설명하는 다른 답변이 많을 때 "PEP8의 말"을 귀하의 질문에 대한 답변으로 받아 들인 것은 매우 불행한 일입니다.

편집기 대신 탭 대신 공백을 삽입하거나 예전처럼 계속 진행해야합니까?

그것은 달려 있으며,이 마지막 질문에 대한 대답은 실제로이 스레드에 가치를 더할 수 있다고 생각한 곳입니다. IMHO는 사용되는 언어에 관계없이 사용하기에 가장 적합한 코딩 표준은 다음과 같은 상황에 따라 다릅니다.

  • 이미 존재하는 코드 기반 작업을 시작한 경우 : 어렵지 않게 기존 코딩 표준을 따릅니다.
  • 팀이 처음부터 새로운 프로젝트를 시작하는 경우 : 토론하고, 팀으로서 처음에 코딩 표준을 결정하고이를 고수하십시오.
  • 혼자가는 경우 : 가장 행복하고 생산적인 느낌을주는 모든 것을하십시오

어떤 상황에 처하게 되나요?

마지막으로 내 자신의 솔로 프로젝트의 입장을 명확히하기 위해 탭이 더 이해하기 쉽고 탭이 더 생산적이므로 탭을 사용합니다.


두 가지를 모두 갖춘 솔루션이 있다고 생각합니다.

  1. PEP-8과의 호환성 및 공백 사용
  2. 4 칸 대신 탭을 사용하는 편리함

메모장 ++에서 "기본 설정"-> "탭 설정"으로 이동하여 오른쪽 목록에서 "Python"을 선택하십시오. 그런 다음 "탭 크기 : 4"를 확인하고 "[탭]을 공백으로 바꾸기"확인란을 선택하십시오. 이 경우 탭 키를 사용하여 들여 쓰기 만하면되지만 Notepad ++는 실제로이를 4 개의 공백으로 변환합니다.


이다 PEP (8) 년 7 월 2017로 :

여기에 이미지 설명을 입력하십시오

이 진술이 다른 선택의 여지를 남기지 않는 것 같습니다.

그러나 이것은 PEP 8이 우리에게 알려주는 것이 아닙니다.

여기에 이미지 설명을 입력하십시오

위의 첫 번째 문은 공백에 대한 선호도나타내고 두 번째 문은 탭으로 들여 쓴 코드의 존재와 일부 코더에 대한이 선호도를 인정합니다.

그래서 : PEP 8 탭 들여 쓰기 허용이다. 들여 쓰기 자체가 필수이므로 이해할 수있는 들여 쓰기가 혼합 된 탭과 공간을 용납하지 않습니다.

그것은 언급 할 가치가있을 수 있습니다 구글의 파이썬 코딩 스타일 또한 4-공간 규칙을 따른다.

탭이나 4 공간을 선호 하는 다른 다양한 주장과 정당화 가 있습니다.

PEP 8을 시행하는 회사에서 근무하거나 PEP 8을 따르는 다른 사람들과 정기적으로 코드를 공유하는 경우 상식에 따라 4 칸이 사용됩니다. 나는 C / C ++의 탭에 익숙했었다. 그러나 IDE를 올바르게 설정하면 차이가 최소화됩니다.


더 많은 돈을 벌 수있는 유일한 이유로 탭 대신 공백을 사용하십시오. :)

참고 : 공백을 사용하는 개발자는 탭을 사용하는 개발자보다 더 많은 수익을 창출합니다 (스택 오버플로 블로그 게시물).


그래서 여기에 모든 반응을 읽고 들여 쓰기를 제거하기 위해 백 스페이스 버튼을 반복적으로 두드리지 않고 PEP-8을 준수하는 방법이 궁금합니다. 그리고 모든 멋진 매크로 버튼과 빛으로 Logitech 게임 키보드를 내려다 봅니다. 머리에 전구가 켜집니다.

Logitech의 소프트웨어를 열고 탭 버튼 바로 옆에있는 버튼에 대한 몇 가지 매크로를 정의했으며 문제가 해결되었습니다.

하나의 버튼은 네 개의 공백을 추가하고 다른 하나는 백 스페이스를 네 번 추가합니다. 놀랄 만한. 놀랍습니다. 내 새끼 손가락으로 버튼을 누르기 쉽습니다.

다음을 확인하십시오 : ""<-네 칸! 버튼 하나만 누르면! 백 스페이스를 보여줄 수 있다면 나도 그렇게 할 것입니다. Logitech G105 키보드를 구입하면 모든 문제가 해결됩니다!


방금 시작했지만 공백보다 탭을 사용하는 것이 훨씬 쉽고 공간의 PEP-8 호출 만 이해하지 못합니다. Sublime Text 2는 흰색 세로 점선으로 탭을 시각화하는 훌륭한 작업을 수행하며 목록 또는 사전의 요소를 정렬하기 위해 공백을 두 개 혼합하는 경우가 있지만 상황이 발생하지 않았습니다. 해로운 것.


탭을 좋아하지만 80 열 제한과 같은 다른 규칙과 호환되지 않습니다.

4 개의 공백 탭을 선택하고 10 개의 탭을 삽입하면 80 열 제한을 충족시키기 위해 40 자의 공간이 남습니다. 다른 코더가 8 개의 공백 탭을 선호하는 경우 동일한 줄은 120 자로 표시되며 유효한 80 열 줄로 표시되지 않습니다!

80 열 제한을 정의하려면 탭의 길이를 선택해야합니다. 이 경우 x 공백이나 길이가 x 인 탭이 실제로 차이가 없습니다.

편집 : 관련 스레드 : 공백 대신 탭을 사용할 때 최대 줄 길이 유지?


공간 사용의 주요 이점 중 하나는 소스 편집기가 선택한 편집기를 넘어 소스와 상호 작용해야하는 다양한 외부 도구에서 소스 코드가 렌더링되는 방식의 가변성을 제거하고 구성한 설정을 변경한다는 것입니다.

구체적인 예제로는 Visual Studio Code 의 툴팁 또는 Beyond Compare 또는 WinMerge 와 같은 diff 도구 , 성능 또는 코드 범위 도구 등에서 파이썬 docstring의 렌더링을 고려할 수 있습니다. 기본적으로 이러한 다양한 인터페이스 툴은 각각 다른 설정을 가질 수 있습니다 탭이 해석되는 방식과 짜증나고 때로는 혼란스럽고 때로는 혼란스럽고 혼란 스러울 수 있습니다.

간단히 말해서 당신은 무기고의 도구 모음에 대한 균일 한 구성을 조정하는 대신 소스에서 정렬을 정의합니다. 공백은 모노 스페이스 글꼴로 엄격하게 해석되어 타사의 탭 렌더링 구현 / 구성이 아니라 글꼴의 정의로 인해 전체 툴링에 걸쳐 안정적이고 일관된 정렬을 제공합니다.

이에 대한 또 다른 각도는 탭 문자가 부주의 한 탭 완성을 트리거 할 수있는 터미널에서 실행되도록 선행 탭 소스를 복사하는 것입니다. 예를 들어 다음 Python 소스 (들여 쓰기로 사용되는 탭)를 복사하면,

cmd_create_db = '''CREATE TABLE test (
    Col1 INTEGER,
    Col2 INTEGER,
    Col3 TEXT)'''

다음과 같은 것을 볼 수 있습니다 (Visual Studio Code의 통합 터미널에서 볼 수 있음) ...

>>> cmd_create_db = '''CREATE TABLE test (
... .DS_StoreCol1 INTEGER,
... .DS_StoreCol2 INTEGER,
... .DS_StoreCol3 TEXT)'''
>>> cmd_create_db
'CREATE TABLE test (\n.DS_StoreCol1 INTEGER,\n.DS_StoreCol2 INTEGER,\n.DS_StoreCol3 TEXT)'

(제외 : 툴링 전반에 걸친 일관성에 대한 관찰이 Stack Overflow에서 발견 된 급여 차이에 대한 힌트를 나타낼 수있는 세계를 주문하려는 날카로운 개발자의 차별적 인 마음의 표시인지 궁금했습니다.)


두 개의 공백 들여 쓰기와 탭 키를 눌렀을 때 탭 대신 공백을 삽입하는 편집기 (kwrite)를 사용합니다.

참고 URL : https://stackoverflow.com/questions/119562/tabs-versus-spaces-in-python-programming



반응형