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

왜 않습니다 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



답변

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

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

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

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

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


답변

나는 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 _…


답변

장단점이 있습니다.

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

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


답변

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


답변

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

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

답변

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

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

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

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

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


답변