- 함수(Function)의 개념
- 내장함수
- 함수만들기 (기본)
- 모듈
- 패키지
- 예외처리
- 객체 (객체지향)
- 클래스
- 클래스 만들기와 속성, 메서드 살펴보기
- 클래스 더 나아가기
함수(Function)의 개념
적절한 코드 블록을 이름으로 정의해 놓는 것으로
정해진 이름으로 호출하여 실행 결과값을 받을 수 있다.
-코드 재사용, 유지보수, 테스트 및 디버깅에 용이하다.
내장함수 sorted 강의에서 메소드 부분 다시 들어야함
내장함수는 파이썬에서 이미 코드를 정해놓고 코드블록을 묶어서 이름을 정해준거다
1) type함수
데이터의 어ᄄᅠᆫ 타입인지 알려준다 (값을 넣어줘도 상관없다)
2) sum함수 (list나 튜플에 사용)
합을 내는 함수
tip. 일반적인 사칙연산에 동작 가능할때만 동작한다 문자일때x
3) 함수 정렬하기 sorted()
메소드 클래스 내부에 포함 된 함수
ex) 숫자 = [5,2,,4,1,6]
sorted_숫자 = sroted(숫자)
print(sorted_숫자)
print(sorted(숫자, reverse = True))
tip. 거꾸로 나오게하는 reverse
=> 강의에서 추가로 설명하는 코드는 이해를 못해서 복습예정
4) 절대값 구하기
abs()
tip. 음수의 경우 양수로 전환
tip. 문자열이 숫자를 나타내도 작동하지않아 타입변환을 해야한다.
5) 반올림하기 tip.소수점을 반올림한다
round(이름, 몇 번째 자리)
대표적인 내장함수 복습(어떤 역할이였는지 생각하기)
print()
input()
len()
type()
int()
float()
str()
sum()
min()
max()
sorted()
abs()
round()
함수만들기 (기본)
1) 함수를 만드는 지정어
def
tip. 키워드란 미리 특정기능을 수행하도록 파이썬에서 만들어 놓은것
def 함수이름(매개변수1, 매개변수2)
매개변수1 % 2
매개변수2 % 3
print(매개변수1 + 매개변수2)
return True
함수이름(9,8)
=>3
True
2) 매개변수
함수 메소드를 정의할 때 만들어내는 변수를 말한다
함수가 호출될 때 입력 받는 값인 인수를 처리하기 위한 변수
매개변수는 콤마,로 구분
입력받는 값(인수, arguments)
ex)
def add(a, b):
return a + b
result = add(3, 5)
print(result) # 8
a와b는 매개변수
3,5는 인수
3) 반환값
만일 두가지 값(여러개의 변수)을 반환 한다면
반환값, 정상실행여부 순서로 돌려준다
tip. 복수 반환값일 땐 튜플의 형태로 나온다
tip. 반환값이 없는 함수도 만들어진다 (값은 None으로 표시)
4) 기본값
매개변수에 미리 지정된 값을 의미한다.
def greet(name="손님"): #name="손님"이 기본값이다.
return f"안녕하세요, {name}님!"
print(greet()) # 안녕하세요, 손님님!
print(greet("Alice")) # 안녕하세요, Alice님!
5) 다중 기본값
매개 변수에는 기본값이 없을수도 있는데
항상 기본값이 없는 매개변수 뒤에 기본값이 있는 매개변수가 와야한다.
(값이 전달 되없을 경우 값을 기본값이 없는 경우에 먼저 넣는다.)
def greet(age, name="손님"): #age는 기본값 설정하지 않아 name앞에 온다.
return f"안녕하세요, {name}님!, {age}살 이네요."
6) 가변 매개변수
정해지지 않은 개수에 인수를 받을 수 있도록 한다.
(args는 위치 인수의 튜플을 받는다)
def add(*args):
return list(args)
print(add(1, 2, 3)) #[1, 2,, 3]
print(add(10, 20, 30, 40)) #[10, 20, 30, 40]
7) 임의의 키워드 인수 받기 kwargs
함수에 전달되는 인수의 이름과 값을 딕셔너리 형태로 처리합니다
def test(**kwargs):
print(kwargs)
return True
test(name = “AI”, age = 30) #name: ‘AI’, age: 30
args와 kwargs 함께 사용하기
args는 kwargs 앞에 와야한다.
def test(a, b, *args, **kwargs):
print(kwargs)
print(args)
print(a, b)
return True
test(30, 20, 30, 20, name = “AI”, age = 30)
#name: ‘AI’, age: 30
모듈
모듈이란
Python 파일(.py) 하나가 하나의 모듈
tip. 똑같은 이름의 변수를 값을 낸다면 충돌이있을 수 있다.
1) import
import를 이용하여 다른 파일로 가져올 수 있다.
tip. 모듈은 파이썬에서 기본적으로 제공 된다. ex) math
tip. 이름이 길면 별칭을 붙일 수 있다 ex) import math as m #m이 별칭이다.
2) from
모듈 내의 특정 함수, 클래스, 변수를 선택적으로 불러올 수있다
ex) from math import sqrt
result = sqrt(36)
print(result) #6.0
tip. 만약 math의 모든 함수를 가져올거면
from math import *(사용시 주의 필요/필요시에만 사용)
패키지(머신러닝, 딥러닝)
모듈의 모음으로, 여러 모듈을 논리적인 그룹으로 묶은 디렉터리
패키지는 디렉터리 내에 __init__.py 파일이 있어야 Python에서 패키지로 인식됩니다.
mypackage/
__init__.py
module1.py
module2.py
패키지
코드 재사용을 촉진하며, 대규모 프로젝트에서 코드의 가독성과 유지보수성을 높이는 데 중요한 역할
1 ) 패키지 설치방법
pip
Python 패키지 인덱스(PyPI)에서 원하는 패키지를 쉽게 설치할 수 있다.
- 설치: pip install requests
-목록 확인: pip list
- 패키지 업그레이드: pip install —upgrade 패키지이름
-패키지 제거: pip uninstall 패키지이름
-가상환경 생성: python -m venv 이름
-가상환경 활성화: myenv\Scripts\\activate
-가상환경 비활성화: deactivate
tip. numpy는 선형된 수나 수치계산에서 강력한 도구이다
예외처리
try, except, finally
어ᄍᅠᆯ 수 없이 예외가 나거나 상황에따라 에러가 발생할 경우대응해야 한다.
(프로그램이 멈추기 때문에)
잘못 된 인덱스 접근 ex) 존재하지 않는 데이터에 접근하는 경우
try:
# 예외가 발생할 가능성이 있는 코드
except 예외타입:
# 예외가 발생했을 때 실행할 코드
except:
# 예외가 발생했을 때 실행할 코드
tip. 예외 타입에 맞지않는 코드가있을 경우 마지막 줄의 기본 except문을 넣으면 값이 나온다
1) 항상 실해되는 코드 finally
에러 후 더 이상 사용하지 않겟다고 설정하지 않으면 코드에 자원이 계속 할당 받는 상태이다.
그래서 자원을 할당받은 경우에는 반드시 해제해줘야한다.
ex)
try:
file = open("data.txt", "r")
data = file.read()
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
finally:
file.close()
print("파일을 닫았습니다.")
2) 어떤 에러가 발생했는지 모를땐
except exception as e:
print(f“모든에러 {e}”) # 예외가 발생했을 때 실행할 코드
3주차 강의를 들으며 추가적으로 알게 된 코드
ZeroDivisionError 0으로 나누기가 되었을 때 나오는 에러
FileNotFoundError파일을 찾을 수 없을 때 마노는 에러
square함수: 입력값 n의 제곱
items함수: 딕셔너리에 있는 키와 값들의 쌍을 얻을 수 있습니다.
math.sqrt (n): 파이썬에서 제곱근을 구하는 방법
pow(): 함수는 제곱 연산을 수행
sin(): 사인 갑을 반환
cos(): 코사인 갑을 반환
tan(): 탄젠트 갑을 반환
클래스, 객체 (객체지향)
현실에서 존재들을 프로그램적으로 표현하는 것이다
(장점: 재사용성, 유지보수, 기능추가, 확장성)
1) 클래스(Class)
객체를 만들기 위한 청사진(Template) 또는 설계도
속성Attributes와 매서드Methods(행동)
-속성은 객체의 데이터를, 메서드는 객체의 동작을 정의합니다.
2)상속
이미 작성 된 코드를 재사용하고 새로운 객체를 쉽게 만들 수 있다.
장점: 재사용성, 유지보수성
-다형성
같은 메서드를 호출했는데 상황에따라 다른 결과가 나오게할 수 있다.
-추상화
단순화하여 나머지는 감추어준다. 중요부분만 보여준다
클래스 만들기와 속성, 메서드 살펴보기
pass 클래스 내부가 비어있을떄 (def, If 에서도 사용가능)
class AI_student:
pass
1) __init__ 메서드는 객체가 생성될 때 자동으로 호출되며, 객체의 초기 속성을 설정하는 역할을 합니다.
2) slef
현재 메서드가 호출 된 객체를 자동으로 전달한다.
tip. 위치가 정해져있다 (첫번째 매개변수)
tip. 파이썬은 매서드를 호출할떄 자동으로 지금객체를 self에 전달해준다.
tip. 단순히 관례이며 자기자신을 나타내는 것
하지만 너무 필수적인 관례라서 첫 번째 인자로 매서드를 정리하는 경우 self를 넣는게 좋다.
클래스 더 나아가기
매직매서드 파이썬에서 미리 정해진 매서드
1) __init__
2) __repr__ 객체에 공식적인 문자열을 표현(반환)하는 매서드를 만들 수 있다
그 객체를 다시 생성할 수 있는 문자열이여야한다. => __repr__코드를 사용했을 때 출력 된코드를 그대로 코드에 입력했을 때 동일한 객체사 생성되는 문자열이 나와야한다.
3) __add__ 객체간의 덧셈(other필요 => 다른 객체가 드러올 자리)
4) __eq__ 두 객체를 비교하는 연산자(other필요 => 다른 비교 될 객체가 드러올 자리)
5) __str__ 비공식적인 문자열을 반환해준다(사용자에게 보여지기 위한 문자열 출력)
클래스 매서드
클래스를 대표하는 매서드 = 클래스 매개변수
class MyClass:
class_variable = 0 (클래스변수: 클래스 제일 외곽에 변수가 선언 되어있는 것,
모든 객체가 공유한다)
@classmethod (@classmethod: 클래스를 대표하는 메서드를 정의하는 방법)
def increment(cls):
cls.class_variable += 1
정적메서드 클래스나 객체와는 관련이 없지만, 클래스의 맥락에서 의미가 있는 메서드
매개변수, 변수, 클래스 변수 정적메서드 클래스 메서드 일반 매서드
=>개념이라도 외워야하니 찾아보자!
상속
큰분류 내부에 분류가있는데 분류의 특징 중 큰분류가 가지는 특징은 당영히 가지게 되는데 이를 다시한번 정의하게 되면 너무 낭비라서 가져쓰는 방법이 상속이다.
(부모클래스와 자식클래스가있는데 자식클래스는 부모의 내용을 상송받아 그대로 사용가능)
class Animal:
def __init__(self, name):
print("부모의 생성자입니다")
self.name = name
def speak(self):
return "소리를 냅니다."
def test(self):
print("동물입니다")
class Dog(Animal): # Animal 클래스를 상속받아 Dog 클래스 정의
def __init__(self, name, age): #생성자를 재정의 한다.
super().__init__(name) #부모의 생성자를 호출합니다.
self.age = age
def speak(self): # 부모 클래스의 메서드를 재정의 (오버라이딩)
return f"{self.name}가 멍멍 짖습니다."
# 객체 생성
dog = Dog("Buddy", 15)
print(dog.speak()) # Buddy가 멍멍 짖습니다.
- abstractmethod 무조건 상속받는 매서드에서 구현해라라는 명령어
eval함수: 매개변수로 받은 expression (=식)을 문자열로 받아서, 실행하는 함수 입니다.