220608_TIL / Python 활용

신두다·2022년 6월 8일
0

TIL

목록 보기
37/82

Key words

디버깅, pdb, 함수, 클래스, OOP(객체 지향적 프로그래밍), 데코레이터 (etc ..)

1. Python 디버깅

  • 디버깅(debugging)은 버그를 찾아 없애는 과정으로만 생각하고 있었는데, 좀 더 넓게 생각하면, 내가 원하는대로 코드가 작동하는지 확인하는 전반의 과정으로도 생각할 수 있다고 한다.
  • 오늘은 파이썬 표준 라이브러리에 포함된 디버깅 도구인 pdb라는 걸 사용하는 것에 대해서 배웠다.
  • python 3.7 이상 버전은 breakpoing()만 적어도 디버깅이 가능하지만, 이 미만 버전은 import pdb를 해주어야 하고, breakpoint() 대신 pdb.set_trace()라는 메소드를 사용한다.
  • pdb통해서 breakpoint()를 기준으로 n, s 등을 통해 이동할 수 있는데, 원하는 곳에서 원하는 코드를 실행해보며 내가 기대한 값이 나오는지 확인하며 디버깅을 해나가는 방식이었다.
    • conticue: 다음 중단점을 찾아 이동
    • llist: 주변 11 줄 코드 입력
      (->이 가르키는 부분 직전까지 실행된 것 헷갈리지 말기)
    • step: 다음 문장으로 이동
      • 다음 문장이 A 함수라면, A 함수 내부에서 추가 탐색 진행. / A 함수의 Call부터 시작.
    • next: 다음 문장으로 이동
      • 다음 문장이 A함수라면, A함수의 return 값을 받음. / A함 수 내부에 들어가지 않음.
    • s,n의 차이에 대해서, n을 주로 쓰는 것 같긴 하던데, 정확한 쓰임새 차이는 내가 직접 해봐야할 것 같다.
  • 오늘 실습 때 직접 써볼 기회는 없었다. 주말에 보충 학습 할 때 자세히까진 아니어도 구동은 해봐야겠다. (pdb 공식문서)

2. python 함수

  • 함수는 코드의 반복을 줄이기 위해 사용하는 것이다!
  • built-in functions는 내가 아는 sum()등 파이썬 설치와 함께 사용할 수 있는 내장 함수를 말하는데, 이 내장함수는 가볍기 때문에, 만약 user-defined functions와 내장함수 둘 다 사용 가능하다면 내장함수를 사용하는 것이 좋다고 한다.
  • 함수 생성하는 기본 문법이야 알고 있으니 굳이 적지 않겠다.
  • 필수 인수, 키워드 인수, 기본 인수
    • 필수 인수 (required arguments): 위치를 지키며 전달되는 인수. 가장 일반적으로 내가 많이 쓰던 형태이다. 쓰는 순서가 중요하다.
      def person_info(first_name, last_name):
      • 2개의 필수 인수가 필요한데 1개만 넘기면 TypeError가 발생한다.
    • 키워드 인수 (keyword arguments): 파라미터 이름을 사용해 전달되는 인수. person_info(last_name="bob", first_name="sponge")
      • 필수 인수에서 순서 중요하다고 했는데, 이렇게 키워드로 직접 지정을 해주면 순서가 상관이 없어진다.
    • 기본 인수 (default arguments): 파라미터에서 기본으로 사용되는 값. def person_data(name, type_p='human'):
      • 디폴트를 정해주는 것이다. type_p 인수를 넘기지 않으면 기본값을 저기 적은 걸로 한다는 거 보면, 이렇게 기본인수로 지정해도 내가 직접 값을 넣을 수는 있는 듯?
      • 중요한 것은 직접 기본값을 정하는 파라미터는, 기본값이 없는 파라미터 뒤에 넣어야 한다는 것이다.
      • 이 이유에 대해서 찾아보았는데, 기본 값이 있는 파라미터를 앞에 넣을 경우 컴퓨터가 해석하는 흐름 상 어느 인자에 할당해야 하는지 애매해지기 때문이라고 한다. 이 정도로만 알고 넘어가자.
  • returnprint의 차이: 단순 출력이냐, return된 값을 저장하고 쓸 수 있냐의 차이로 나는 표현해보았다.
  • 파라미터와 인수(argument): 인수는 함수 호출에서 입력으로 전달되는 실제 값, 파라미터는 변수로 생각하면 된다.

3. Python 클래스

  • 클래스에 대해서는 예전에 점프 투 파이썬 볼 때, 쿠키틀과 쿠키, 계산기 만들기를 본 적이 있어서 이해하기 그래도 좀 쉬울 줄 알았는데 내용이 워낙 많아 머리에 집어넣기 바빴다ㅎ

  • 클래스에 대해 설명하기에 앞서 파이썬의 특징인 객체 지향 언어에 대한 개념도 터치하고 갔다. 몰랐는데 절차 지향 언어라는 것도 있더만? (차이에 대한 블로그 글 / 이 글에서는 두 개념이 완전히 상반되는 개념이 아니라고 강조하고 있다.)

  • 객체 지향 언어에 대해서는 쉽게 표현한 그림, 영상이 정말 많아서 여기에 내가 보았던 자료를 옮기진 않겠다. 여하간 처음 파이썬 배울 떄 파이썬은 객체지향 언어라서 우리가 이해하기 쉽게 되어있다~라는 말을 들었던 게 생각났다. 여하간 파이썬에서는 모든 것이 객체이다 라는 말을 기억하라고 한다!

  • 클래스 생성하는 기본 문법은 이전과 같은 이유로 옮겨두지 않겠다.

  • 클래스 내에서 작동하게 되는 함수들을 method라고 부른다.

  • 객체와 인스턴스의 차이는? 점투파의 설명이 아주 잘 되어있다.

    • 내가 표현한 예시로는, 이 쿠키가 어떤 쿠키틀에서 나온건지 설명할 때, 이 쿠키는 저 쿠키틀에서 나온 인스턴스야~라고 할 수 있다. or 식당에 가면 있는 원산지 표기법 생각도 났는데 적절한 비유일지는 모르겠구먼~
  • self에 대해서

    • 클래스 만들고 안에 함수 선언할 때 등 self를 기본으로 깔고 들어가는 경우를 많이 봤는데, 만약 아래와 같은 코드에서 self를 넘겨주었다면,

      class Pokemon:
      			pokemon_a = 'pikachu'
      
      			def print_pika(self):
      				print("pika")
    • 다음과 같이 인수를 안 넘겨도 출력이 된다.

      poke_a = Pokemon()
      poke_a.print_pika() #=> 'pika'
    • 쉽게 생각해 self는 클래스의 인스턴스 자체로 보아도 될 것 같다.

  • __init__

    • 생성자 함수라고 하는데, 이건 객체가 생성될 때 자동으로 호출되는 함수라고 생각하면 될 것 같다. 쉽게 말해 클래스로 인스턴스를 만들었을 때 디폴트로 실행되는 함수라고 생각하면 된다.
  • @property, getter, setter 는 오늘 실습도 해보긴 했는데, 보충 공부 필요하니 보충할 때 별도로 개념 정리 다시 해보자~

  • _, __의 차이 (single underscore, double underscore/dunderscore)

    • 음.. 파이썬에서는 보통 _를 사용해 이건 클래스 내부 변수 혹은 함수다~ 라는 것을 암시한다고 하고, 밑줄이 존재하는 건 조심히 다뤄야 한다는 암묵적인 관습 아래 쓰인다고 한다.
    • 내가 이해한 걸로는 아무 것도 없다가 -> _를 넣고 -> 혹은 __를 쓰는게, 단계적으로 다른 사람이 이 변수/함수는 좀 건들지 않아줬으면 한다는 의미가 강해지는 걸로 생각해도 되지 않을까 싶다.
  • 클래스 상속


4. python 데코레이터

  • 데코레이터(@)는 파이썬 코드를 좀 더 clean하게 써보자고 제안된 것으로, 가장 많이 사용되는 건 함수 데코레이터라고 한다.
    (DRY(Don't Repeat Yourself))
  • 이 코드를 일단 기억하면 될 듯? 만약 데코를 안 했다면 여러 개의 함수로 길이가 늘어났을 것이다. (그런 의미에서 특히 대규모 소프트웨어 개발 시 더 이득이 커지는 듯?)
def last_deco(func): # func 는 실행할 함수입니다.
    def last(): # 실행할 함수를 감싸는(wrap) 함수입니다.
        func()
        print("last")
    return last

@last_deco
def my():
    print("my 라는 함수입니다.")

@last_deco
def mine():
    print("mine 이라는 함수입니다.")

@last_deco
def iam():
    print("iam 이라는 함수입니다.")
  • 역시 보충 공부 필요.. 하하하!!

4. 그 외

  • 파이썬의 탄생과 철학 꿀잼이었다. 1주일 시간이 남아 심심해서 파이썬을 만든 그대는.. 천재...
    • 이스터에그로 숨겨둔 import antigravity, import this도 신기하고 재밌었다.
  • is, ==의 차이점: 다시 봤을 때 기억나지 않는 다면 이 글을 보자.
  • isinstance(): 오늘 실습할 때 문제에서 많이 봤던 함수인데, 만약 isinstance(1, int)라고 하면, 1이 int인지 알아보겠다는 것이고, True 혹은 False로 알려준다.

4. 실습한 것

사실상 오늘의 하이라이트였다.

  • 과제는 74문제였고, assert 구문에 대한 답을 작성하는 것으로 구성되어 있었다.
  • 오늘 배웠던 파이썬 개념들을 실제로 구동하며 확인해볼 수 있도록 넓은 스펙트럼으로 이루어져있었다.
  • 나는 IDLE 켜놓고 다 실행해보면서 했다. 파이썬 필수 개념 터치해보기 굉장히 좋다는 생각이 들었다.
  • 74문제를 다 여기 옮겨올 수는 없고.. 몇 가지 헷갈리는 거 메모해뒀는데 주말에 다시 보면서 필요한거 더 공부해야지.. 74문제가 터치하는 개념이 진짜 다 달라서 그만큼 계속 새로운 개념을 받아들여야 돼 힘들었지만 그래도 재밌었다!

더 해야할 것 간단 메모

  • property 함수/데코레이터에 대해서는 이 글이 설명이 잘 되어있어 덕을 많이 봤다. 감사합니다.. 보충 공부 필수..
  • __str____repr__의 차이, __repr__repr()의 차이 등은 너무 너무 헷갈렸다.. 주말에 오늘 풀었던 문제 보면서 보충 공부 해야겠다. 구글링해서 글 봐도, 공식 문서 봐도 헷갈려~
    • 오늘 이해한 걸로는, 만약 repr()라는 내장함수를 쓴다고 했을 때, 내부 시스템적으로는 __repr__ 등이 돌아가는 과정을 통해 결과를 출력한다~ 는 식으로 보았는데.. 맞나..!!?
    • __str__, __repr__는 의미와 목적도 미묘하게 다르고, 특정 상황에선 특정 메써드가 우선 순위를 갖기도 하는 것 같은데 추가 공부 필수..
  • super() : 클래스 상속하면 부모 클래스 기능 기본적으로 다 사용할 수 있는데 이 기능은 뭐지? 아 부모클래스 특정 메소드 쓰고 싶을때 쓰는 듯? 더 찾아보자.

Feeling


  • 오늘은 거의 역대급으로 굉장히 넓고 수 많은 정보를 10시간 내내 끊임없이 받아들여야 했었기 때문에, 에너지 소진이 많이 된 날이었다. (오늘 TIL에 적은 것들은 내가 오늘 직접 본 글, 영상에 비해 압축하고 간결하게 적은 거고, 다 적으면 너무 길어질 것 같아 일부로 안 적은 것 짜잘한 것들도 있다) 어후 어후~
  • 그래도.. 오늘은 배우는 개념에 대해 세션 설명 등도 자세하게 나와있어서 공부하는 재미가 있었어.. 난 성장하고 있다구.. 좋아 좋아~~!!! 74문제 과제 풀면서, 이거 진짜 언제 끝나나 싶은 생각도 마지막엔 들었었는데, 세션으로 공부하는 것보다 직접 코드 돌려보면서 결과 확인하는게 훨씬 더 도움이 많이 된 것 같다.
  • 보충 공부는 필수인 노트다.
    오늘도 고생 많았어~~
profile
B2B SaaS 회사에서 Data Analyst로 일하고 있습니다.

0개의 댓글