일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- nextjs
- gitmoji
- mnist
- Colab
- neural network
- randrange
- cache locality
- Next.js
- Keras
- self
- f-string
- class
- 메서드채이닝
- 메서드
- 구글코랩
- 인공신경망
- 깃모지
- 정수
- 정적 메서드
- ITER
- 캐시의 지역성
- 비공개 속성
- built-in function
- 실수
- 식별연산자
- choice
- __init__
- PYTHON
- 추상 클래스
- 맴버연산자
- Today
- Total
IT world
[Python] 24.01.11 함수와 클래스 복습 본문
오늘은 이전의 내용 함수부터 클래스까지 복습하는 시간을 가졌다.
주로 자주 쓰는 함수, lambda, bulit-in function 그리고 클래스 생성까지 실제 프로그램을 작성할 때 자주 사용되는 내용을 소개해주셨다.
실습 문제를 통해 수업이 진행되었고, 해당 내용을 소개해보려고 한다.
1. 함수
map()을 통해 함수에 대한 간단한 예제를 작성했다. 아래 코드처럼 함수 사용 시 재사용과 가독성의 이점이 있다.
파이썬은 객체지향의 언어로, 객체의 주소를 담고 있다.
a = 10 → 'a'는 무엇일까? 바로 int의 인스턴스 즉 int 정수형 클래스로 만들어진 객체이다.
print..! 파이썬에서 출력을 위한 코드를 작성하려면 print를 사용한다. 하지만 print는 함수의 이름일뿐 print도 출력을 위한 기능의 주소를 가리키고 있는 것이다.
즉 print_list[print, print, print] 처럼 리스트에 print 함수를 추가했다면, print_list[2]('hello world') 이렇게 사용이 가능한 것이고 python = print 처럼 새로운 변수에 print를 할당하면 python과 print는 같은 주소를 바라보게 되고 python('hello world') 이런 식의 사용이 가능하다는 것이다.
2. 람다(lambda)
익명함수 (anonymous function) 라고도 불리며, 간단한 한줄짜리 함수를 정의할 때 사용되고 함수를 한 번만 사용하거나 함수를 인자로 전달해야하는 경우에 사용된다. (일회성으로 필요한 곳에 즉시 사용한 후에 버릴 수 있으므로 코드가 간결해지고 메모리가 절약된다.)
람다함수는 map(), filter(), sorted() 등의 함수와 같이 사용되며, 간단한 경우에는 사용하기 좋지만 복잡한 로직이나 여러줄을 처리해야하는 코드에서는 적합하지 않다.
여기서 람다와 일반함수의 차이점을 간단히 설명하자면
- 람다함수는 이름이 없지만, 일반함수는 이름이 있다.
- 람다 함수는 표현식 하나만 사용할 수 있으며, 복잡한 로직을 구현할 수 없고 일반함수는 복잡한 로직을 구현할 수 있다.
- 람다함수는 간결한 코드 작성에 유용하지만, 일반함수는 코드의 가독성과 재사용성을 높이는데 도움이 된다.
2.1 map()을 이용한 예시
-. map()이란 여러 개의 데이터를 받아서 각각의 요소에 함수를 적용한 결과를 반환하는 내장 함수
-. 구조 : map(function, iterable) → 첫번째 매개변수로는 함수, 두번째 매개변수로는 반복 가능한 자료형이 온다.
-. map 함수의 반환값은 map객체이기 때문에 해당 자료형을 list 또는 tuple로 형변환시켜줘야한다.
-. 함수동작은 두번째 인자로 들어온 반복 가능한 자료형을 첫 번째 인자의 함수에 하나씩 집어넣어 함수를 수행하는 것으로, map(적용시킬함수, 적용할 값들) 이런 식이다.
# 1. 함수를 사용한 예시
def 제곱(x):
return x ** 2
list(map(제곱, [1, 2, 3, 4]))
#2. 람다를 사용한 예시
list(map(lambda x: x**2, [1, 2, 3, 4]))
#3. 마스킹 문법
list(map(lambda x: True if x % 2 == 0 else False, [1, 2, 3, 4]))
#4. 2개의 리스트의 각 인덱스 값을 더하는 예제
a = [1,2,3,4]
b = [17,12,11,10]
list(map(lambda x, y:x+y, a,b))
2.2 filter()을 이용한 예시
-. filter()란 주어진 반복 가능한 자료형(리스트, 튜플 등)에서 특정 조건에 맞는 요소만 골라내는 역할을 하는 내장함수
-. 구조 : filter(function, iterable) → 첫번째 매개변수로는 필터링 조건을 판별하는 함수, 두번째 매개변수로는 반복 가능한 자료형이 온다.
-. filter() 함수는 주어진 함수를 반복 가능한 객체의 각 요소에 적용하여, 함수의 반환값이 True인 요소만 걸러내어 반환한다. 즉 함수에 값을 하나하나 넣어서 결과가 참인지 거짓인지에 따라 요소를 포함할지 말지 결정한다.
→ function에서 처리되는 각각의 요소는 Boolean 값으로 반환되고, True로 반환되면 그 요소는 남게되고, False는 제거된다.
-. filter 함수의 반환값은 filter객체이기 때문에 해당 자료형을 list 또는 tuple로 형변환시켜줘야한다.
# 1. 함수를 사용한 예제
def is_even(number):
return number % 2 == 0
numbers = [1,2,3,4,5]
even_numbers = filter(is_even, numbers)
# 2. 람다를 사용한 예제
list(filter(lambda x: x % 2 == 0, range(100))) # 0~99까지 짝수 호출
# 3. 람다를 사용한 예제2
list(filter(lambda x: True if x % 3 ==0 or x % 5 == 0 else False, range(100)))
2.3 sorted()을 이용한 예시
-. sorted()란 데이터(리스트, 튜플, 문자열, 딕셔너리)를 정렬하는 가장 기본적인 역할을 하는 내장함수로 원본을 수정하지 않는다.
-. 구조 : sorted(iterable, key=None, reverse=False) → 첫번째 매개변수로는 반복 가능한 자료형(정렬할 데이터), 두번째 매개변수로는 정렬 기준을 설정하며, 세번째 매개변수는 정렬방향을 설정한다.
-. 정렬된 복사본을 반환하기 때문에 원본을 보존해야하는 경우 많이 사용되며, 복사본을 만드는 과정에서 메모리를 추가적으로 사용하기 때문에 느릴 수도 있다.
반별점수 = [
['홍길동', 30, 55, 22],
['홍춘향', 55, 60, 73],
['이철수', 32, 65, 68],
['이호준', 92, 11, 95],
]
# 1. 함수를 사용한 예시
def 함수(x):
return x[3]
sorted(반별점수, key = 함수) # index = 3의 값으로 정렬
#2. 람다를 사용한 예시
sorted(반별점수, key = lambda x: x[2]) # index = 2의 값으로 정렬
#3. 람다를 사용한 예시_역순
sorted(반별점수, key = lambda x: x[1] + x[2] + x[3], reverse = True)
#4. 람다를 사용한 예시_조건 추가
# 합산이 동일할 경우 x[3]의 값을 비교하여 정렬
sorted(반별점수, key = lambda x:(x[1] + x[2] + x[3], x[3]), reverse = True)
3. 클래스(class)
클래스는 객체 지향 프로그래밍에서 사용되는 기본 구조로, 데이터와 그 데이터에 관련된 함수를 하나의 단위로 묶는 역할이며 객체가 가질 수 있는 속성(attribute)과 행동(method)을 정의한다.
인스턴스는 클래스에 의해 생성된 객체로 동일한 클래스로부터 여러 인스턴스를 생성할 수 있으며, 각 인스턴스는 서로 다른 속성 값을 가질 수 있다.
즉, 클래스는 일종의 설계도이며, 인스턴스는 그 설계도를 바탕으로 만들어진 실체이다.
클래스를 사용하는 이유는 효율적인 프로그래밍을 위함이다. Class를 사용하면 훨씬 직관적이고 가독성을 높일 수 있으며, 재사용성이 훌륭하며, 객체들이 가지는 속성들도 각 객체별로 관리하기가 쉽다.
클래스를 생성하면 __init__ 함수인 생성자를 사용할 수 있고 Class가 생성될때 가장 먼저 호출되는 함수이다. 모든 클래스의 가장 기본이 되는 메서드로 self 매개변수를 사용하며, self 키워드를 통해 클래스 내부 속성 및 메서드에 접근할 수 있다.
class Post:
post_number = 1234 # 클래스 변수
def __init__(self, title = ''): # 초기값 설정
'''
인스턴스 고유의 영역을 정의하는 것
'''
self.title = title # title 인스턴스 변수
def __add__(self):
pass
def __len__(self):
pass
def update(self):
pass
def delete(self):
pass
def __str__(self): # 이런 방법으로 __str__ 메서드를 재정의할 수도 있다.
return self.title
게시물1 = Post('파이썬은 참 깊군요!')
print(게시물1.title)
print(게시물1) # 클래스에서 __str__ 메서드의 사용을 재정의 했으므로 title을 출력한다.
'모두의 연구소(오름캠프) > AI 모델 활용 백엔드 개발 과정' 카테고리의 다른 글
[Python] 24.01.15 클래스 심화 (0) | 2024.01.15 |
---|---|
[Python] 24.01.12 클래스 반복 (0) | 2024.01.12 |
[Python] 24.01.10 클래스 (0) | 2024.01.10 |
[Python] 24.01.09 조건문과 반복문 (0) | 2024.01.10 |
[Python] 24.01.08 파이썬의 함수, Parameter, Argument 그리고 지역/전역 변수 (0) | 2024.01.10 |