변수 및 함수 이름에 대한 파이썬의 명명 규칙은 무엇입니까?


772

C # 배경에서 변수와 메소드 이름의 명명 규칙은 일반적으로 camelCase 또는 PascalCase입니다.

// C# example
string thisIsMyVariable = "a"
public void ThisIsMyMethod()

파이썬에서는 위의 내용을 보았지만 밑줄이 사용되는 것을 보았습니다.

# python example
this_is_my_variable = 'a'
def this_is_my_function():

파이썬에 더 바람직한 결정적인 코딩 스타일이 있습니까?

답변:


867

Python PEP 8 : 함수 및 변수 이름을 참조하십시오 .

가독성을 높이기 위해 필요에 따라 밑줄구분 된 단어와 함께 함수 이름은 소문자 여야 합니다.

변수 이름은 함수 이름과 동일한 규칙을 따릅니다.

mixedCase 는 이전 스타일 과의 호환성을 유지하기 위해 이미 일반적인 스타일 (예 : threading.py ) 인 컨텍스트에서만 허용됩니다 .


127
PEP = 파이썬 향상 제안.
피터 Mortensen

8
@RickyRobinson 밑줄이 계속 단어를 사용한다는 것을 모르는 어떤 뇌-죽음 코드 편집기를 사용하고 있습니까? 무료 많은 것들이 있습니다. IDE를 사용할 수 없으면 메모장 ++을 사용합니다. 이를 위해 파이썬 편집 용 템플릿을 다운로드 할 수 있습니다. (다른 사람들은 훨씬 더 유용한 무료 다운로드를 추천 할 수 있습니다.)
ToolmakerSteve

57
밑줄 스타일의 한 가지 경우는 한 글자로 된 단어를 더 잘 사용할 수 있다는 것입니다. (거의 바보 같은) 예의 경우 findMeAClass아마도 find_me_a_class.
heltonbiker 2016 년

9
대문자로 표시된 잘 알려진 상수, 텐서 등을 자주 사용하는 과학 컴퓨팅에는 모든 소문자 변수 이름의 규칙이 적합하지 않다는 것을 알았습니다.
andreasdr

12
@rr PEP8은 "스타일 가이드"이며 표준이 아니라 규칙으로 설명합니다. 또한 항상 "규칙"을 따르지 않는 이유를 명확하게 설명합니다.
Tahaan

710

구글 파이썬 스타일 가이드는 다음과 같은 규칙이 있습니다 :

module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_CONSTANT_NAME, global_var_name, instance_var_name, function_parameter_name, local_var_name.

비슷한 명명 체계를 적용해야합니다 CLASS_CONSTANT_NAME


37
a) 예를 좋아합니다-감사합니다. b) CamelCase와 밑줄의 매력없는 혼합물? 그러나 : Python과보다 유연한 데이터 모델을 처음 사용하기 때문에 Google 가이드 뒤에 확실한 생각이있을 것입니다.
Matthew Cornell

19
@MatthewCornell 믹싱은 당신이 그것을 고집하는 한 나쁘지 않습니다. 함수에 밑줄과 클래스가없는 것을 알면 실제로 가독성이 더 쉽습니다.
Pithikos

1
@ MatthewCornell 파이썬과 관련이 있다고 생각하지 않습니다. Go는 실제로 임의의 아름다움 표준을 시행하며 예를 들어 곱슬 중괄호 규칙을 준수하지 않으면 컴파일에 실패합니다. 본질적으로 누군가가 실제로 신중하게 생각했는지, 아니면 그들이하는 방식을 실제로 좋아했는지에 대한 주사위 굴림입니다.
Parthian Shot

상수 정적 속성을 GLOBAL_CONSTANT_NAME이라고 생각하십니까? 클래스의 범위에있는 것처럼 정확하게 글로벌 한 것은 아닙니다.
James T.

그때 들어갑니다 property... 아마도 그것은 실제로 무엇보다 척하는 것이 문제 일 것입니다.
joelb

240

David Goodger ( 여기서는 "Pythonista와 같은 코드" )에서 PEP 8 권장 사항을 다음과 같이 설명합니다.

  • joined_lower 함수, 메소드, 속성, 변수

  • joined_lower또는 ALL_CAPS상수

  • StudlyCaps 수업 용

  • camelCase 기존 컨벤션 만 준수


3
+1 시각적 예. PEP8이 상수를 제안 joined_lower하는 곳을 알 수 없지만 "단어를 구분하는 밑줄이있는 모든 대문자"만 있습니다. 새로운 열거 형 기능에 대해서도 궁금 합니다.
Bob Stein

1
StudlyCaps for classes거의 모든 언어의 수업에 대한 보편적 인 규칙입니다. 그렇다면 왜 파이썬 내장 클래스 datetime.datetime가 있습니까? (이 규칙을 따르지 않습니까?)
Prahlad Yeri

3
@PrahladYeri : 불행히도, unittest.TestCase.assertEqual친구도 snake_case 규칙을 따르지 않습니다. 진실은 파이썬 표준 라이브러리의 일부가 컨벤션이 확정되기 전에 개발되었으며 이제 우리는 그것들에 고착하고 있습니다.
wchargin

3
CamelCase는 "camelCase"( "mixedCase"라고도 함)라고 말하고 어떤 사람들은 "CamelCase"( "StudlyCaps"라고도 함)라고 말하면 혼동됩니다. 예를 들어 PEP는 "CamelCase"를 언급하고 "camelCase"는 언급합니다.
Pro Q

here-link가 죽었을 수도 있습니다. 아마 david.goodger.org/projects/pycon/2007/idiomatic
Wolf

42

파이썬 코드를위한 스타일 가이드가 인정 하는 것처럼

파이썬 라이브러리의 명명 규칙은 약간 엉망이므로 절대로 일관되지 않습니다.

이것은 단지 파이썬의 표준 라이브러리 를 나타냅니다 . 그들이 일관성 유지할 수 없다면 , 모든 파이썬 코드에 대해 일반적으로 준수해야 할 규칙이 거의 없을 것입니다.

이것과 토론에서, 파이썬으로 넘어갈 때 변수 또는 함수에 대해 Java 또는 C # (명확하고 잘 확립 된) 명명 규칙을 계속 사용하면 끔찍한 죄 가 아니라고 추론합니다 . 물론 코드베이스 / 프로젝트 / 팀의 일반적인 스타일을 준수하는 것이 가장 좋습니다. 파이썬 스타일 가이드가 지적했듯이 내부 일관성이 가장 중요합니다.

나를 이단자로 기각하십시오. :-) OP와 마찬가지로 저는 아직 "Pythonista"가 아닙니다.


32

PEP 8은 다른 답변이 보여으로,하지만, PEP 8은 표준 라이브러리에 대해서만 스타일 가이드이며, 그것은 오직 복음 거기로 물었다. 다른 코드 조각에 대한 PEP 8의 가장 빈번한 편차 중 하나는 특히 메서드에 대한 변수 명명입니다. mixedCase를 사용하는 코드의 양을 고려할 때 단일 우세한 스타일은 없지만, 인구 조사가 엄격하게 이루어지면 mixedCase가있는 PEP 8 버전으로 끝날 것입니다. PEP 8과 다른 편차는 거의 없습니다.


9
이것이 대답 된 08 년에 이것은 사실 이었지만 요즘 거의 모든 주요 도서관은 PEP 8 명명 규칙을 사용합니다.
Thane Brimhall

28

언급했듯이 PEP 8은 lower_case_with_underscores변수, 방법 및 함수 에 사용한다고 말합니다 .

내가 사용하여 선호 lower_case_with_underscores변수 및 mixedCase메서드와 함수의 코드가 더 명시 적으로 읽을 수 있습니다. 따라서 파이썬의 선에 따르면 "명시 적은 암시 적보다 낫다"및 "가독성"


3
+1 나는 그 두 가지를 전환하지만 (변수에 mixedCase를 사용함), 더 뚜렷한 모든 것을 갖는 것은 특히 함수를 전달할 수 있기 때문에 다루고있는 것을 즉시 명백하게하는 데 도움이됩니다.
Xiong Chiamiov

2
"가독성"은 매우 주관적이지만. 밑줄이 더 읽기 쉬운 메소드를 찾습니다.
Pithikos

당신의 선호는 수년간의 Java 개발에서 나온 초기 직관이었습니다. 나는 변수에 _를 사용하는 것을 좋아하지만, 눈에서 보면 함수와 메소드에 대해 조금 재미있어 보입니다.
Michael Szczepaniak

21

@JohnTESlade가 답변 한 내용에 더 나아가. Google의 Python 스타일 가이드 에는 몇 가지 깔끔한 권장 사항이 있습니다.

피해야 할 이름

  • 카운터 또는 반복자를 제외한 단일 문자 이름
  • 모든 패키지 / 모듈 이름에서 대시 (-)
  • \__double_leading_and_trailing_underscore__ names (파이썬에 의해 예약 됨)

명명 규칙

  • "내부"는 모듈 내부 또는 클래스 내에서 보호 또는 개인을 의미합니다.
  • 단일 밑줄 (_)을 앞에 추가하면 모듈 변수 및 함수를 보호 할 수 있습니다 (import * from에 포함되지 않음). 인스턴스 변수 나 메소드에 이중 밑줄 (__)을 붙이면 변수 나 메소드를 클래스에 비공개로 만드는 역할을합니다 (이름 맹 글링 사용).
  • 관련 클래스와 최상위 함수를 모듈에 함께 배치하십시오. Java와 달리, 모듈 당 하나의 클래스로 제한 할 필요는 없습니다.
  • CapWords클래스 이름에 사용하지만 lower_with_under.py모듈 이름에 사용하십시오 . 라는 이름의 기존 모듈이 많이 있지만 모듈 이름 CapWords.py이 클래스 이름을 따를 때 혼란 스럽기 때문에 권장하지 않습니다. ( "대기 - 내가 쓸 않았다 import StringIOfrom StringIO import StringIO?")

Guido의 권장 사항에서 파생 된 지침 여기에 이미지 설명을 입력하십시오


17

대부분의 파이썬 사람들은 밑줄을 선호하지만, 지금 5 년 이상부터 파이썬을 사용하고 있어도 여전히 그들을 좋아하지 않습니다. 그들은 나에게 못 생겼지 만 어쩌면 그것은 내 머리 속의 모든 Java 일 것입니다.

나는 단순히 클래스의 이름을 지정하는 방식에 더 적합하기 때문에 더 나은 낙타 표기법처럼, 그것은이 더 논리적 인 느낌 SomeClass.doSomething()보다 SomeClass.do_something(). 파이썬의 전역 모듈 색인을 살펴보면 둘 다 찾을 수 있습니다. 시간이 지남에 따라 다양한 소스의 라이브러리 모음이기 때문에 엄격한 코딩 규칙을 사용하여 Sun과 같은 한 회사에서 개발 한 것이 아닙니다. . 결론은 다음과 같습니다. 더 좋아하는 것을 사용하십시오. 그것은 개인적인 취향의 문제 일뿐입니다.


10
나는 Java 배경에서 왔으며, 밑줄 만 장황하고 매력적이지 만 후자는 의견입니다. 명명은 일부면에서 가독성과 간결함의 균형입니다. 유닉스는 너무 멀었지만 en.wikipedia.org/wiki/Domain-specific_language 는 제한적입니다. CamelCase는 대문자로 인해 읽을 수 있지만 추가 문자가 없습니다. 2c
Matthew Cornell

2
모든 밑줄은 가상 (내 머리 속) 네임 스페이스의 구분 기호로 볼 수 있기 때문에 저에게 밑줄은 함수 / 메소드에서 매력적입니다. 그런 식으로 난 쉽게 내 새로운 기능 / 방법의 이름을하는 방법을 알 수 있습니다 : make_xpath_predicate, make_xpath_expr, make_html_header,make_html_footer
Pithikos

3
당신은 (보통) 전화하지 않습니다 ( SomeClass.doSomething()정적 방법은 일반적으로 드 rare니다)an_instance.do_something()
Dave

15

개인적으로 클래스, mixedCase 메소드 및 함수에 CamelCase를 사용하려고합니다. 변수는 일반적으로 밑줄로 구분됩니다 (기억할 수있는 경우). 이 방법으로 모든 것이 동일하게 보이기보다는 정확히 무엇을 부르는지 한 눈에 알 수 있습니다.


15
낙타 케이스는 "camelCase"와 같은 소문자 IIRC로 시작합니다.
UnkwnTech

11
나는 결정체가 옳았다 고 생각합니다. 적어도 그의 사용법은 PEP8 (CamelCase 및 mixedCase)의 사용법과 일치합니다.
Jarrett

1
@UnkwnTech FirstLetterUpper의 용어는 때때로 PascalCase
SurpriseDog

CamelCase 또는 camelCase? 그냥 숙고합니다.
Pokhrel 서밋

11

이것에 관한 논문이 있습니다 : http://www.cs.kent.edu/~jmaletic/papers/ICPC2010-CamelCaseUnderScoreClouds.pdf

TL; DR 그것은 snake_case가 camelCase보다 더 읽기 쉽다고 말합니다. 이것이 현대 언어가 가능한 곳에서 뱀을 사용하는 이유입니다.


9
흥미롭게도이 연구의 결과는 소스 코드에 포함 된 식별자에 반드시 적용되는 것은 아니다. 낙타의 식별자는 프로그래밍 구조에 내장 될 때 더 나은 게슈탈트 요소로 작용할 수있다”고 말했다.
rob3c

2

코딩 스타일은 일반적으로 조직의 내부 정책 / 컨벤션 표준의 일부이지만 일반적으로 all_lower_case_underscore_separator 스타일 (snake_case라고도 함)이 파이썬에서 가장 일반적이라고 생각합니다.


0

일관되고 따르기 쉬운 다른 프로그래밍 언어로 개발할 때 개인적으로 Java 명명 규칙을 사용합니다. 그렇게하면 프로젝트에서 가장 어려운 부분이 아닌 어떤 규칙을 사용 해야할지 끊임없이 고민하지 않습니다!


다소 동의합니다. 언어 X가 소량의 프로젝트 일 경우, 텍스트를 형식화하는 방법의 컨텍스트 전환이 부담이 될 수 있습니다. 주요 문제는 라이브러리가 하나의 스타일 ( library_function(my_arg))로 호출되는 것입니다 .
Lan

-2

일반적으로 언어의 표준 라이브러리에서 사용되는 규칙을 따릅니다.

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