티스토리 뷰

728x90

 

✅ 코드 컨벤션

 

  • 나 자신이 짠 코드도 잊을 때가 있다. 다른 사람과 팀 프로젝트를 할 때에도 어떤 코드인지 모를 때가 있다. 코드 컨벤션은 이러한 상황을 만들지 않기 위해 스타일을 통일하자는 '약속'이다.
  • https://peps.python.org/pep-0008/ 에 들어가면 어떤식으로 약속을 하자고 하는지 나와있다. 변수 이름을 지을 때에도 약속을 하면 한번에 이해하여 좋다. 예를 들면 PIE 같은 변수는 3.14로 의례 쓰기 때문에 약속하여 사용한다. 약속을 하면 가독성이 좋아진다.
  • 파이썬, 자바 등 프로그램에 따라 컨벤션이 다르니 개발하는 언어에 맞는 컨벤션을 써야한다.

 

    • 파이썬에서는 네이밍 컨벤션으로 변수 / 함수를 네이밍할 때는 Snake 표기법을, Class를 네이밍할 때는 Pascal 표기법을 사용합니다.
    • 네이밍 컨벤션이란? 네이밍 컨벤션에는 대표적으로 Pascal, Snake, Camel 표기법이 존재합니다. 예를 들어 Python is very good 이라는 문장이 있을 때, 아래와 같이 사용됩니다. 
      • Pascal : PythonIsVeryGood / 각 단어의 띄어쓰기를 대문자로 구별합니다.
      • Camel : pythonIsVeryGood / 자바에서 주로 사용되고 파이썬에서는 사용되지 않는다.  Pascal과 동일하지만, 첫 문자가 소문자로 시작합니다. 모양이 쌍봉낙타와 비슷하게 생겼다고 해서 지어진 이름입니다.
    • Camel 표현식은 첫 번째 문자가 소문자로 시작하는 Lower Camel Case와 첫 번째 문자가 대문자로 시작하는 Upper Camel Case가 존재합니다. 이 때문에 간혹 Pascal과 Camel 표현법의 용어가 혼동되기도 하는데,
      Microsoft에서는 소문자로 시작하는 표현법만 Camel로, 대문자로 시작하는 것은 Pascal이라고 명시하고 있습니다. 더 자세한 내용은 여기(https://en.wikipedia.org/wiki/Camel_case)서 확인할 수 있습니다.
    • Snake :  python_is_very_good / 각 단어를 언더바( _ )로 구분합니다. 모양이 뱀과 비슷하게 생겼다고 해서 지어진 이름입니다.

 

 

  • 위 사진처럼 함수에서 변수를 선언할 때에 hello_world 처럼 소문자를 앞에 쓰고 _ 언더바로 띄어쓰기를 해준다.
  • class 를 선언할 때에는 띄어쓰기를 대문자로 표현해주기 때문에 HelloWorld 로 표기하여 변수를 선언해준다.
  • 이를 혼용하여 Hello_World 라고 변수를 선언(네이밍 컨벤션이)하면 표기실수로 면접 포트폴리오에 좋지 않다.

 

  • 클래스, 함수, 변수 등을 네이밍할 때는 이름만 보고 해당 코드가 어떤걸 의미하는지 추측할 수 있어야 합니다.
    • PIE = 3.14 상수를 표현할 때는 예외적으로 모든 문자를 대문자로 표현합니다. (상수의 리스트를 표현할 때에도 NUMBER_LIST 로 표현할 수 있다.)
    • numbers = [1,2,3,4] list를 표기할 때는 복수로 표현한다. 혹은 number_list와 같이 표현할 수도 있습니다.
      • for number in numbers: 반복문 사용 시 가독성을 늘릴 수 있습니다.
    • def add(a, b): return a + b  (add 니까 더하겠구나 하는) 함수를 네이밍할 때는 해당 함수가 어떤 역할을 하는지 표현해야 합니다.

 

 

  • 자동으로 코드가 정렬되게 해보자. pep8 패키지를 설치하자.  vs 화면에서 톱니바퀴를 누른뒤 setting 을 클릭 - python formatting 을 검색 후 autopep8로 설정한다. - 그런 다음 다시 format on save 를 검색한다. - save 할 때 formatting을 할것인가? 묻는 곳이다.
  • 실제 사용되는 네이밍 예시
# django rest framework의 serializer 코드 일부

class ModelSerializer(Serializer):
    def validate(self, attrs):
        """
        입력 된 데이터의 유효성을 검증하는 메소드입니다.

        Args:
            attrs : 검증할 데이터(attribute)입니다.
        """

    def create(self, validated_data):
        """
        유효성 검증(validate) 후 instance를 생성할 때 사용되는 메소드입니다.

        Args:
            validated_data : validate의 attrs에서 검증 된 데이터들이 담깁니다.
        """

    def update(self, instance, validated_data):
        """
        생성 된 instance를 수정할 때 사용되는 메소드입니다.

        Args:
            instance : 수정 할 대상입니다.
            validated_data : validate의 attrs에서 검증 된 데이터들이 담깁니다.
        """

 

 

 

 

 

 

 

 

 

 

  변수 유효 범위 ( variable scope )

 

  • python을 포함한 대부분의 언어에는 "변수 유효 범위"라는 개념이 있습니다. 변수가 선언된 위치나 키워드에 따라 변수를 사용할 수 있는 범위가 달라지게 되는데, 이를 변수 유효 범위 혹은 variable scope라고 부릅니다.
  • 파이썬에서 변수는 유효 범위에 따라 지역 변수(local variable)와 전역 변수(global variable)로 나뉘게 됩니다. 지역 변수는 함수 내부에서 선언되며 다른 함수에 영향을 끼치지 않습니다. 반대로 전역 변수는 함수 밖에서 선언되며 어디서든 접근할 수 있습니다. 지역 변수로 선언된 변수는 global 키워드를 사용해 전역 변수로 재선언할 수 있습니다.

 

 

 

 

 

 

  • fun1 에 지역변수를 선언한 것이라 fun2 를 출력하려고 하면 나오지 않는다. number은 fun1 에서만 존재하는 변수이기 때문이다.

 

 

 

 

  • fun1 함수 밖에서 변수를 설정하는 것을 전역 변수를 선언하는 것인데 전역변수를 선언하면 fun2에 변수가 들어가서 출력할 수 있게 된다.

 

 

  • 전역 변수가 다 좋은 것은 아니다. 위와 같이 전역변수를 선언하고 난 뒤에 다시 지역변수를 선언하게 되면 에러가 나서 출력하지 못하는 것을 볼 수 있다.
  • 순서를 바꾸어서 test = 456 이 먼저 오고 print(test)를 뒤로 보내면 456이 출력되지만 전역변수 테스트를 출력하는 것이 아니기 때문에 다르다.

 

 

 

  • global 키워드를 통해 지역변수를 전역변수로 바꿀 수 있다. fun1 에 선언된 지역변수를 바꾸기 위해 위와같이 global 키워드를 쓰면 fun1의 변수가 전역변수로 인식되어 fun2를 출력하면 전역변수 456을 인식해 출력된다.

 

 

  • global 키워드를 권장하지 않는다. 어떤 변수가 어떻게 변형되는지 알 수 없기 때문( 왜일까? https://stackoverflow.com/questions/19158339/why-are-global-variables-evil)
  • 그 때 return 키워드를 써준다.
  • result 라는 변수를 fun1의 값이라고 하자. 그 때 fun2를 출력하는데 값을 result를 넣어라. 이때 result 는 fun1 이므로 값을 보면 return 456 으로 변수 값을 456으로 다시 선언한 것을 할 수 있다.

 

 

 

 

 

 

 

 

 

✅  자주 사용되는 모듈 및 패턴

 

 

반응형

'AI웹 개발자 과정 공부 (팀스파르타) > 파이썬 실무 AI' 카테고리의 다른 글

24.02.28_TIL  (0) 2024.02.28
24.02.27_TIL  (0) 2024.02.27
24.02.23_TIL  (0) 2024.02.23
24.02.22_TIL (파이썬 : 함수)  (0) 2024.02.22
24.02.21_TIL (파이썬 : 리스트, 딕셔너리)  (0) 2024.02.21
반응형
TAG
more
최근에 올라온 글