파이썬(1) - 여러가지 자료형과 문법에 대해

ivor·2022년 1월 19일
1

부스트캠프 AI TECH

목록 보기
2/18

본 시리즈는 부스트캠프 AI TECH 3기 과정에서 배운 점과 배울 점, 회고를 담은 시리즈입니다. 잘못된 정보가 포함되어 있다면 댓글로 알려주시면 감사하겠습니다 :)


부스트캠프 AI TECH 3기 본 과정이 1월 17일 월요일에 시작되었다 💻
(사실 이 글은 2일이 지난 19일에 작성 중이다🥲 이것저것 할 일이 많았기 때문에...)

'첫째 날은 사람들과 인사하고 친해지고, 앞으로의 과정 소개 정도로 마무리 되겠지.' 라고 생각했는데

😇...

대략 10시, 11시 정도에 나의 부캠 첫날 일정이 끝난 것 같다.

사실 그정도까지 부캠에서 요구한 것은 아니었다. 부캠의 코어 타임은 훨씬 일찍 끝났다. 다만 첫째 주에 소화해야 하는 강의의 양이 꽤나 많았고, 프리 코스를 더 꼼꼼히 듣지 않는 탓에 강의가 끝난 후에도 복습할 양이 좀 됐다.

덕분에 매일매일 학습 기록을 남기자는 나의 계획은 무참히 무너졌고 (작심일일ㅠㅠ) 난 강의 수강과 복습, git 등 필요한 다른 공부를 하며 첫째날, 둘째날을 보냈다.

뒤늦게나마 학습 기록을 남기고자 한다.


사실 강의 내용이나 코드 등을 공개하면 안되기에 너무 자세히는 남길 수 없을 것 같다.

다만 내가 어떤 것을 배웠고, 어떤 부분이 궁금하고 미흡했으며, 그것을 메꾸기 위해 더 찾아보고 공부한 것은 어떤 것이 있는지, 그리고 하루를 돌아봤을 때 어떤지를 남기려고 한다.

배운 내용에 대한 짧은 설명에 의문이 들었던 부분이나 중요하다고 느껴진 부분 위주로만 기록해놓을 예정이다. 때문에 '어? 이 챕터에서 이 내용을 안 배웠다고?'라고 느낄 수 있다.
정말 안 배웠을 수도 있지만 그렇게 느낄 정도라면 아마 의문점이 아니거나 중요도가 상대적으로 떨어진다고 판단하여, 간략한 기록을 남기고 싶은 마음에 생략한 부분일 가능성이 높다.
(원래 복습용으로 계획했는데 기록용 정도로 생각해야겠다. 복습은 필기한 패드에서 하는 걸로)


1.17(월)~1.18(화)

(양일간)

  • 컴퓨터에 관한 기본적인 지식
    • OS
    • File System
    • Terminal
      • shell
  • 파이썬 개요
    • 파이썬의 특징, 장단점
      • compilerinterpreter의 차이
        • 작동 방식, 속도, 메모리 등
          사람의 시간이 기계의 시간보다 중요해졌다
  • 파이썬 코딩 환경
  • variables
    • 변수명은 알아보기 쉽고 분명한 의미를 갖는 것으로.
      ('클린 코드'에서도 비슷한 내용을 본 것 같다. 지나치게 길어 반복 사용이 어려운 변수명은 지양해야겠지만, 짧은 길이에만 치중해 뭔지도 알 수 없는 변수명은 더 나쁘다고 생각한다.)
    • primitive data type
      type에 따라 차지하는 메모리 공간이 달라지기에 효율적인 선택이 필요하다
      • list
        • list는 primitive data type은 아니다. 하지만 사용 빈도로 보면 그에 못지 않다.
        • 변수에 list 할당 시 주의할 점
          • b=a[:]의 사용
          • copy.deepcopy()의 사용
        • append()extend()의 차이?
  • functions and consoles
    • function
      • 함수의 필요성
      • 함수는 코드 실행 시 일단 메모리에 올라가므로 되도록 함수는 상단에 적는 것이 좋다.
      • parameter, return의 유무로 나눈 함수의 형태
        • a.sort(), sorted(a)
    • console I/O
      • input()
      • print()
        • % string
          • "%[type]" %[variables]
        • .format
          • "{[index]}".format([argument])
          • ex. "{0:.3f}".format(5.2437)
          • ex. "{0:<10s}".format('apple') (padding)
        • f string
          • f" ~ {[variables, etc.]} ~"
          • ex. f" ~ {apple:*<20} ~" (padding using '*')
  • conditionals and loops
    • conditionals
      • if
        • and, or, not, is, is not, in, not in, etc.
        • 삼항연산자
    • loops
      • for
        • for ~ in range(시작, 종료, step):
        • for ~ in [iterable]
      • while
        • while [조건] :
          • break
          • continue
    • 무한 loop 등의 상황과 debugging의 필요성, 방법
  • strings and advanced functions
    • string
      • list와 유사하게 sequence형
      • 영문자 1개 → 1bytes
        • ASCII 등의 standards
      • string의 여러 함수들
        • capitalize()
        • title()
        • find(), rfind()
        • startswith(), endswith()
      • " or ' 3개 사용으로 여러 줄의 문자열 다룰 수 있음
      • 특수문자
        • \n
        • \b
        • \t
        • \e
        • raw string
          • r"abc\b" → "abc\b" (특수문자 \b의 무력화)
    • 함수 호출 방식
      • call by value

      • call by reference

      • (python) call by object reference

        • 전달 객체 참조
        def func1(x):
            x.append(3)
            print(x)
        
        a = [1,2]
        func1(a)
        print(a)

        [1,2,3] ← x
        [1,2,3] ← a

        • 새 객체 생성
        def func2(x):
            x = [9,10]
            print(x)
            
        a = [1,2]
        func2(a)
        print(a)

        [9,10] ← x
        [1,2] ← a

        • swap
          • 함수 내 로직에 의해 외부 호출자 값이 바뀌어버릴 수 있다.
            때문에 인자로 받은 것을 복사하고 statement를 시작하는 편이 좋다.
            • copy.deepcopy
            • temp=parameter1[:]
    • function-scoping rule
      • local varables
      • global varables
        • global [variable]
    • recursive function
    • function type hint
      • 파이썬의 dynamic typing 특성 → 다른 사용자가 type을 알기 어려운 단점.
      • hint를 통해 함수 interface 파악에 도움을 줄 수 있음.
    • docstring
      • function type hint에서 확장하여 함수에 대한 설명을 함수 시작부에 작성.
      • "(or ')로 감싸서 작성
      • 대체로 parameter, return 등의 설명과 사용 예시 등을 표기
    • 함수 작성 가이드라인
    • 코딩 컨벤션
  • python data structure
    • stack
      • list 구조 이용
      • LIFO(Last In First Out)
      • push(append()), pop(pop())
    • queue
      • FIFO
      • push(append()), pop(pop())
    • tuple
      • list와 유사. 하지만 원소값을 변경할 수 없음.
      • () 사용
        cf) list[] 사용
    • set
      • 값을 순서 없이, 중복 없이 저장
      • {}
      • 함수
        • add()
        • update()
        • remove()
        • discard()
        • clear()
      • 수학의 집합 연산
        • (합집합) union(), |
          • s1.union(s2)
          • s1|s2
        • (교집합) intersection(), &
          • s1.intersection(s2)
          • s1&s2
        • (차집합) difference(), -
          • s1.difference(s2)
          • s1-s2
    • dict
      • key, value
      • {[key]: [value]}
      • 함수
        • keys()
        • values()
        • items()
          • class 'dict_items'를 반환.
            각 요소는 (k1 : v1)의 tuple 형태
    • colletions 모듈
      • list, tuple, dict 등에 대한 보다 효율적인 확장 구조
      • deque
        • from collections import deque
        • queue, stack 지원
        • list에 비해 빠름. 효율적 메모리 구조.
        • LinkedList 특성 지원
          • rotate()
          • reverse()
      • counter
      • OrderedDict
        • (python 3.6부터는 기본 dict type도 ordered라 굳이 안 써도 됨)
      • defaultdict
      • namedtuple

Questions

  • shell이란 core와 명령어를 주고 받을 수 있는 일종의 interface라고 배웠다. windows와 mac에서의 여러 shell 종류가 있는데 이 때 터미널에서 사용할 수 있는 명령어들은 OS별로, shell별로 다른지 궁금하다.

  • 파이썬의 특징 중에 dynamic typing이 있었는데 해당 변수가 필요할 때마다 typing이 수행되는건지 혹은 코드 전문에 대해 처음에 typing이 다 이뤄지는 건지 궁금하다.

  • string type에 대해 사용할 수 있는 함수 중 title()capitalize()의 차이는?

  • defaultdict의 구체적인 사용 방식은?

하루를 돌아보며

😅 '엊그제와 어제를 돌아보며'가 됐다.

주피터 노트북을 켜놓고 강의에 나온 예시나 혹은 그냥 궁금한 부분들을 실습하면서 공부했다. 이 방법은 매우 좋은 방법이었다고 생각한다. '어떤 식으로 코드를 짜야 내가 궁금한 부분을 비교해서 알아볼 수 있을까', '이렇게 코드를 짰을 때 내부적으로 어떤 일이 일어나는가' 등을 고민해보는 과정 자체가 도움이 되었다고 생각한다.

아쉬웠던 점은 궁금한 점을 그때그때 해결하려 하지 않았다는 점이다. 강의를 들어야 한다는 핑계로, 찾기가 어려워서 혹은 그냥 귀찮아서 나중으로 미뤄놓은 질문들을 한꺼번에 처리하는 건 꽤나 품이 많이 드는 일인데다 순간순간 떠올랐던 자잘한 아이디어들은 온데간데 없이 큰 뭉텅이만 남아있다는 느낌이 들었다.
조금 귀찮더라도 그때 그때 머릿속에 떠오른 질문들을 해결해나가는 것이 낫겠다.

지난 이틀동안 꽤 많은 시간을 공부에 투자했다. 사실 자는 시간, 씻는 시간, 먹는 시간을 제외하면 하루의 대부분을 부스트캠프의 온라인 강의실, 슬랙, 줌 등에서 보냈다. 역설적이게도 내가 그동안 얼마나 공부를 게을리 했는가를 느낄 수 있는 시간이었다. 공부는 습관에 꽤나 많은 영향을 받는다고 생각하는데 내 몸은 아직 게으른 그때에서 벗어나지 못한 모양이다. 이 글을 쓰는 지금은 3일째 밤인데 벌써 체력이 많이 떨어진 것 같다 🥲

profile
BEST? BETTER!

0개의 댓글