PEP 8, 키워드 인수 또는 기본 매개 변수 값에서 '='주위에 공백이없는 이유는 무엇입니까?


103

왜 않습니다 PEP 8 주위 공간을 가지고 있지 추천 =키워드 인수 나 기본 매개 변수 값에 ?

이것은 =Python 코드에서 다른 모든 발생 주변에 공백을 권장하는 것과 일치하지 않습니까?

어때:

func(1, 2, very_long_variable_name=another_very_long_variable_name)

보다 낫다 :

func(1, 2, very_long_variable_name = another_very_long_variable_name)

Python의 BDFL에 의한 토론 / 설명에 대한 링크 는 감사하겠습니다.

이 질문은 기본값보다 kwargs에 관한 것입니다. 저는 방금 PEP 8의 구문을 사용했습니다.

나는 의견을 구하는 것이 아닙니다. 이 결정 뒤에 이유를 묻고 있습니다. C 프로그램의 문장 과 같은 줄에 사용 해야하는지 아닌지 묻는 것과 비슷 합니다 .{if

답변:


72

키워드 인수가 본질적으로 변수 할당과 다르기 때문이라고 생각합니다.

예를 들어 다음과 같은 코드가 많이 있습니다.

kw1 = some_value
kw2 = some_value
kw3 = some_value
some_func(
    1,
    2,
    kw1=kw1,
    kw2=kw2,
    kw3=kw3)

보시다시피 정확히 동일한 이름의 키워드 인수에 변수를 할당하는 것이 합리적이므로 공백없이 볼 수 있도록 가독성이 향상됩니다. 우리가 키워드 인자를 사용하고 있고 그 자체에 변수를 할당하지 않는다는 것을 인식하는 것이 더 쉽습니다.

또한 매개 변수는 동일한 행으로 이동하는 경향이있는 반면 할당은 일반적으로 각각 고유 한 행에 있으므로 공간 절약이 중요한 문제가 될 수 있습니다.


6
이것이 사실 일 수 있지만, 잘 설계된 언어에 대한 코드 스타일 권장 사항에이 IMO 아이콘 성을 도입하여 2 자만 저장하는 것이 여전히 이상하게 보입니다. 마치 자바 코드 스타일 이 클래스 정의가 아닌 (같은 수의 문자를 저장함) {뒤에 새 줄 을 넣는 것이 싫다고 말하는 if것과 같습니다. 또한 키워드 매개 변수는 기본값과 다르지만 여전히 동일한 스타일 권장 사항을 사용합니다.
soulcheck

3
내가 말했듯이 그들은 다른 것들입니다. 다르게 작성하는 것이 좋습니다.
fortran

6
나는 그것이 실제로 더 읽기 쉽지 않다고 말하고 싶습니다 kw1 = kw1, kw2 = kw2.) 그러나 아마도 Guido와 Barry가 생각한 것입니다.
soulcheck

1
이 답변은 꽤 설득력이 있기 때문에 받아 들일 것입니다. 링크를 확인해도 상관 없습니다
soulcheck

5
키워드 인수가 변수 할당과 근본적으로 다르다는 사실은 다른 규칙 IMO를 갖는 유효한 인수가 아닙니다. 그 차이는 이미 컨텍스트에서 명확하기 때문입니다. 전자 는 함수 호출 에서 발생 하고 후자는 현재 들여 쓰기 수준에서 독립적이어야합니다. IMO, 5-6 자보다 긴 변수 이름 (즉, 대부분의 경우 실제 생활)의 경우 공백이있는 변형이 더 읽기 쉽습니다.
Axel

13

나는 very_long_variable_name을 기본 인수로 사용하지 않을 것입니다. 따라서 이것을 고려하십시오.

func(1, 2, axis='x', angle=90, size=450, name='foo bar')

이 이상 :

func(1, 2, axis = 'x', angle = 90, size = 450, name = 'foo bar')

또한 변수를 기본값으로 사용하는 것은 의미가 없습니다. 아마도 일부 상수 변수 (실제로 상수가 아님) 일 수 있으며이 경우에는 모두 대문자로되어 있지만 가능한 한 짧지 만 설명적인 이름을 사용합니다. 그래서 another_very _...


1
그것들은 키워드 인자입니다. 비슷한 예는 PEP에 있습니다. 나는 단지 그것을 읽기
어렵게

3
당신은 (본질적으로) : 공간없는 규칙을 합리적으로 만들려면 매우 짧은 변수 이름을 작성하십시오. 그러나 변수 이름이 길면 공백 없음 규칙이 복잡한 환경을 만듭니다. 의미론보다는 가독성에 더 관심이 있고 '할당에 대한 기본값'이 아니라면 무엇을할까요? 그것?
PatrickT

1
@PatrickT "그것은 할당이 아니기 때문에 그것들은 다른 것" 이라는 주장은 그것이 왜 그런지 설명하지 못한다 (철학적 개념); 그것은 단지 그것이 될 수있는 이유를 설명 뿐입니다 (구 사적 개념).
Mateen Ulhaq

11

장단점이 있습니다.

나는 PEP8 호환 코드가 읽는 방식을 매우 싫어합니다. 나는 very_long_variable_name=another_very_long_variable_name인간이 읽을 수있는 것보다 더 읽을 수 있는 주장에 동의하지 않는다 very_long_variable_name = another_very_long_variable_name. 이것은 사람들이 읽는 방법이 아닙니다. 특히 구문 강조가없는 경우 추가적인인지 부하입니다.

그러나 상당한 이점이 있습니다. 간격 규칙을 준수하면 도구를 사용하여 매개 변수를 더욱 효과적으로 검색 할 수 있습니다.


글쎄, = 주위에 공백을 두는 것을 고수한다면 도구를 사용하여 검색하는 것도 다르지 않을 것입니다.
NoName

10

IMO는 args에 대한 공백을 생략하여 arg / value 쌍의 시각적 그룹화를보다 깔끔하게 제공합니다. 덜 어수선 해 보입니다.


나는 일반적으로 공백을 좋아하기 때문에 괄호 안에 공백을 넣어 모든 매개 변수를 공백으로 둘러싸는 경향이 있습니다. 그러나 arg1=40관계가 더 분명하기 때문에 더 읽기 쉽다고 생각합니다 .
Charlie Gorichanaz 2016

3

나는 합리화 할 수 있지만 몇 가지 이유가 있다고 생각합니다.

  1. 공간을 절약하고 더 많은 함수 정의와 호출을 한 줄에 맞추고 인수 이름 자체를위한 더 많은 공간을 절약 할 수 있습니다.
  2. 각 키워드와 값을 결합하면 쉼표 뒤의 공백으로 다른 인수를 더 쉽게 구분할 수 있습니다. 즉, 얼마나 많은 인수를 제공했는지 신속하게 확인할 수 있습니다.
  3. 구문은 동일한 이름을 가질 수있는 변수 할당과 구별됩니다.
  4. 또한 구문은 a == b호출 내에서 유효한 표현식이 될 수있는 동등성 검사 와 (더욱) 구별됩니다 .

3

나에게 그것은 코드를 더 읽기 쉽게 만들고 따라서 좋은 규칙입니다.

나는 변수 할당과 함수 키워드 할당 사이의 스타일 측면에서 주요 차이점 =은 전자의 경우 한 줄 에만 있어야하는 반면 일반적으로 =후자의 경우 한 줄에 여러 개의 s 가 있어야한다는 점이라고 생각합니다 .

다른 고려 사항이 없다면 , 후자는 등호가 일반적으로 형식화되는 방식이 아니고 전자가 변수와 값을 공백으로 멋지게 시각적으로 구분하기 때문에를 선호 foo = 42합니다 foo=42.

그러나 한 줄에 여러 할당이있는 경우 전자는 여러 할당을 공백으로 시각적으로 구분하는 반면 후자는 그렇지 않아 키워드 / 값 쌍이 어디에 있는지 확인하기가 조금 더 어렵 기 때문에를 선호 f(foo=42, bar=43, baz=44)합니다 f(foo = 42, bar = 43, baz = 44).

여기를두기의 또 다른 방법이있다 : 거기 입니다 컨벤션 뒤에 일관성. 그 일관성은 이것이다 : "가장 높은 수준의 분리"는 공간을 통해 시각적으로 더 명확 해집니다. 낮은 수준의 분리는 그렇지 않습니다 (높은 수준을 분리하는 공백과 혼동되기 때문입니다). 변수 할당의 경우 가장 높은 수준의 분리는 변수와 값 사이입니다. 함수 키워드 할당의 경우 가장 높은 수준의 분리는 개별 할당 자체입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.