BootCamp/모두의연구소:오름캠프

24.01.11

혼복필 2024. 1. 11. 17:22
728x90
300x250
SMALL

오늘은 지금까지 해주셨던 강사님과 다른 Python 심화 담당 강사님이 수업을 진행해 주셨어요.

lambda와 class에 대해 더 깊이 공부할 수 있는 시간이었습니다.

따로 교안 같은 걸 참고하지 않고 오로지 강사님 코드로 수업을 진행했습니다.

부족한 이론은 인터넷에 검색하며 보충하였습니다. 참고 하심 될 것 같아요 :)

 

람다 (lambda)

익명 함수(anonymous function)라고도 불림

함수를 한 번만 사용하거나 함수를 인자로 전달해야 하는 경우 쓰임

lambda 인자 : 표현식

def로 함수를 정의하는 것보다 간결하고 간편하게 함수를 정의할 수 있음

add = lambda x, y: x + y의 경우 add 변수는 람다 함수를 참조하게 됨

 

람다 함수의 활용

1. map() 함수와 사용 :  시퀀스(리스트, 튜플 등)의 모든 요소에 함수를 적용한 결과를 반환

2. filter() 함수와 사용 :  시퀀스(리스트, 튜플 등)의 모든 요소 중에서 조건에 맞는 요소만을 반환

3. sorted() 함수와 사용 : 시퀀스(리스트, 튜플 등)의 요소를 정렬한 결과를 반환

+ 4. reduce() 함수와 사용 : 시퀀스(리스트, 튜플 등)의 모든 요소를 누적적으로 계산한 결과를 반환

 

 

+ enumerate : 인자로 넘어온 목록을 기준으로 인덱스와 원소를 차례대로 접근하게 해주는 반복자(iterator) 객체를 반환해 주는 함수

+ generator : iterator를 생성해 주는 함수

= iterator : next() 메서드를 이용해 데이터에 순차적으로 접근이 가능한 객체

def generator(n) :

    i = 0

    while i < n :

        yield i

        i += 1

yield란?

일반 함수의 경우 사용이 종료되면 결과를 호출부로 반환한 뒤 함수 자체를 종료 후 메모리 상에서 정리

yield는 generator가 실행 중 yield를 만날 경우 해당 함수는 그 상태로 정지되며 반환 값을 next()를 호출한 쪽으로 전달

이후 일반 함수처럼 종료되는 것이 아닌 그대로 유지됨

= 함수에서 사용된 로컬 변수나 instruction pointer 등과 같은 함수 내부에서 사용된 데이터들이 메모리에 그대로 유지

 

generator를 사용하는 이유

1. 메모리를 효율적으로 사용 가능

2. Lazy Evaluation 효과 (계산 결과 값이 필요할 때까지 계산을 늦추는 효과)

 

클래스 (class)

class 클래스 이름 : 

    클래스의 성질이나 행동 정의 = 함수 정의 # (메서드 : method)

인스턴스명 = 클래스()

객체.메서드 # (어떤 객체의 메서드를 사용할 때 형식)

 

클래스 : 어떤 데이터가 있는지, 어떤 조작을 할 수 있는지, 어떤 제약 조건들이 있는지 등을 명시한 추상적인 설계도

인스턴스 : 클래스로 만든 실제 예시

클래스가 쿠키를 찍어내는 쿠키틀이라면, 인스턴스는 그 쿠키틀로 찍어낸 쿠키

생성자 : 인스턴스가 처음 만들어질 때 어떻게 세팅할 것인지 설정하는 함수

모든 클래스의 가장 기본이 되는 메서드

정의 시 self 매개변수가 필요, 모든 메서드는 self로 시작해야 함

self : 클래스 내부 속성 or 메서드에 접근할 때 반드시 사용

바깥에서 내부 메서드에 접근할 때 Post.author 방식으로 접근

내부에서 속성과 메서드에 접근할 때는 self를 사용 (post와 거의 동일)

= 모든 메서드는 가장 첫 번째 매개변수로 self를 반드시 가져야 함, 실제 사용할 때는 self 대신 post(__, __, __)

(속성을 만들 때 하나의 개념을 나타내는 속성은 하나이어야 함, 주의할 것)

 

class Post: # 클래스 선언

    def __init__(self, author, content): # 생성자 정의

        self.author = author # author, content 등은 클래스의 속성

        self.content = content

    def print_twice(self, content): # 메서드 정의

        print(content * 2)

post = Post() # 클래스의 인스턴스 생성

post.print_content('hello') # 클래스 속 메서드를 사용

 

+ 클래스 상속

부모 (부모의 속성, 메서드) 자식 (부모+자식의 속성, 메서드)

자식은 기본적으로 부모의 모든 것을 상속받을 수 있음, 원하지 않을 경우 받지 않을 수 있음

Python에서만 부모의 속성을 모두 상속 가능 (Java의 경우 부모에게도 결정권이 있음 : private)

+ 상속이 필요한 이유

1. 여러 클래스가 비슷한 속성과 메서드를 공유 시

2. 서로 다른 클래스 간의 계층 구조가 확실할 때

 

728x90
300x250
LIST

'BootCamp > 모두의연구소:오름캠프' 카테고리의 다른 글

24.01.15  (0) 2024.01.15
24.01.12  (0) 2024.01.12
24.01.10  (2) 2024.01.10
24.01.09  (2) 2024.01.09
24.01.08  (4) 2024.01.08