아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
꽃다운오징어151
꽃다운오징어15120.08.11

파이썬의 변수명 규칙이 궁금합니다.

파이썬에서 변수명을 쓸 때 _(언더바)가 자주 쓰이는 것을 볼 수 있습니다.

class 에서도 self.__value 처럼 언더바를 2개 붙여서 쓰기도하고, __init__ 같은 경우도 있죠

이러한 규칙은 단순한 명시적인 건가요, 아니면 특별한 기능이 있는건가요?

55글자 더 채워주세요.
답변의 개수
5개의 답변이 있어요!
  • 안녕하세요. 파이썬에서 underscore는 특별한 기능을 가지고 있기도 하고 그냥 관용적으로 쓰이는 경우도 있고 매우 다양합니다.

    https://dbader.org/blog/meaning-of-underscores-in-python

    이곳에 설명이 잘되어 있는거 같습니다.

    간단히 요약 드리면

    1) _bar 변수의 의 경우

    그냥 관용적으로 사용하는 경우입니다. internal use로 사용하는 변수라는 이미입니다. 즉 외부에 노출하지 않겠다는 거죠. 다만 그냥 관용적으로 쓰이는 것일뿐입니다.

    2)

    def _internalF()

    이렇게 이름 지은 것들은 import를 하는 경우, import한쪽에서 사용할수가 없습니다. 하지만 이름을 명시해서 import한 경우에는 사용이 가능하구요..

    3) 앞뒤에 언더스코어가 두개씩 있는 경우

    __init__

    이런 경우인데요 보통 던더라고 부르기도 하고 magic method라고 부르기도 합니다.


  • 결론부터 말씀드리자면

    • 이중 접두사&접미사 밑줄(double leading and trailing underscores)

      파이썬 언어의 컨밴션으로 특별한 변수 혹은 메서드에 사용되며 사전에 정의 되어있음

      __init__, __len__, __eq__, __file__

    • 이중 접두사 밑줄(double leading underscores)

      컨밴션이 아닌 문법으로 클래스간의 속성이 충돌되지 않도록 방치함

      • mangling

        변수나 함수 명을 그대로 사용하지 않고 컴파일러 혹은 인터프리터가 일정한 규칙으로 변형

    • 단일 접두사 밑줄(single leading underscore)

      모듈의 private 클래스|함수|변수|메서드 에서 사용되는 컨벤션

      모듈을 import 할때 _로 시작되는 것들은 무시됨

      그 외 interpretor에서는 마지막 결과값 혹은 특정값들의 무시를 용도로 사용

      >>> 10 10 >>> _ * 3 30 >> x, *_, y = (1, 2, 3, 4, 5) # x = 1, y = 5

    각 언어마다 패러다임이 있듯이 코딩 스타일도 존재합니다.
    Python에서는 PEP8이 있으며 Naming과 관련된 규칙이 있으니 참고하시면 클린코드에 도움이 될 것입니다.


  • 파이썬 공식 페이지에 가보시면 코딩 컨벤션이라는 부분이 있습니다. (아래 링크)

    https://www.python.org/dev/peps/pep-0008/

    대부분의 언어들은 공식 페이지에 가보시면 코딩 컨벤션이라는게 있습니다.

    파이썬의 경우 PEP8 이라는 코딩 컨벤션을 사용하고 있습니다.

    코딩 컨벤션을 어긴다고해서 실행이 안되는건 아니지만 다른 개발자들과 협업을 하기 위해서는 지켜주는게 좋습니다.

    IDE에서도 코딩 컨벤션을 체크해주기 때문에 조금만 신경 쓴다면 어렵지 않게 익숙해질 수 있습니다.


  • 언더스코어를 앞에 붙이는 것은 일반적으로 쓰지 않는 명명규칙이니 변수의 스코프내에서 중복을 방지하기 위해 쓰는 일종의 약속입니다. 해당 변수는 건드리지 말아달라는 의미이기도 하고요

    또한 private 변수처럼 해당 py파일 임포트시 외부에서 사용이 불가능합니다 구글에서 파이썬 맹글링이라고 검색해보시면 더 많은 정보를 찾아보실 수 있을 것입니다.


  • __init__ __add__

    이들을 reserved method 라고 부릅니다.

    class 내에 이런 method을 구현하게 되면 특별하게 작동하게 됩니다.

    예를 들면 init의 경우, constructor 역할을 하게 되는데 이 말은 class를 처음 만들 때, 자동으로 실행되는 코드입니다.

    add의 경우에는 두 클래스 객체간 + 연산을 시행시 어떻게 작동할지 기술할 수 있습니다.