인공지능을 위한 파이썬 3-6 [完]
인공지능을 위한 파이썬 4-6 [完]
데이터 타입 변환 알아보기
데이터 타입 변환이란 , 변수에 저장된 값을 다른 데이터 타입으로 바꾸는것을 의미한다.
이러한 변환을 명시적 변환과 암시적 변환으로 구분할수있다.
명시적 타입 변환
직접 타입 변환 함수를 사용하여 데이터를 변환하는 방식을 명시적 타입 변환이라 한다.
int() 함수
숫자와 문자열을 정수로 변환한다
float() 함수
정수와 문자열을 실수로 변환 한다.
str() 함수
숫자나 다른 타입의 데이터를 문자열로 변환한다.
bool() 함수
데이터를 불리언형으로 변환한다.
불리언은 참(True) ,거짓(False)을 나타낸다.
0=거짓 1=참 ""빈문자열=거짓 "hello"문자열= 참
list() , tuple() , set() 함수
각기 다른 컬렉션 타입으로도 변환이 가능하다.
암시적 타입 변환
암시적 타입 변환은 python이 자동으로 데이터를 변환하는 경우를 말하며 ,
일반적으로 숫자형 데이터간의 연산에서 발생한다
이처럼 파이썬은 정수와 실수를 함께 연산 할때, 자동으로 a정수(int)5를 실수(float)로 변환하여 결과를 실수로 반환한다.
문자열 변환시 주의 할 점
- 문자열을 숫자로 변환할때, 반드시 숫자형태의 문자열이어야 한다.
ex) a = "123" a="문자열"
b = int(a) b=int(a)
print(b) # 123 print(b) # 오류 - 실수를 정수로 변환할때 소수점 이하의 값이 손실 될수 있다.
ex) a=4.51
print(int(a)) #4 (소수점 이하가 잘려나감)
함수 알아보기
함수(function)는 특성 작업을 수행하는 코드 블록을 정의하는 프로그래밍 구성 요소.
함수의 장점
- 반복되는 코드의 재사용
프로그램 내에서 동일한 코드가 여러번 사용될때 이코드를 함수화 시켜 재사용 할수있으며 ,
이를 통해 코드의 중복을 줄이고 유지보수성을 높일수 있다. - 코드의 모듈화
프로그램을 여러개의 작음 함수로 분할하여, 각각의 함수들이 하나의 특정 작업만 수행하도록
하는것을 모듈화라 칭하는데, 이를 통해 디버깅과 테스트가 쉬워진다. - 복잡한 작업의 분할
복잡한 문제를 해결할 때 , 함수를 사용하여 문제를 여러개의 작은 작업으로 분할 할수 있다.
함수 사용 시 주의 사항
- 함수는 가능한 하나의 작업만 수행하도록 설계한다.
하나의 함수가 여러가지 작업을 수행한다면, 이해하기 어렵고 함수의 장점을 없애는 일이다. - 매개변수의 수를 적절히 유지
함수의 매개변수가 많으면 사용이 복잡해지고, 오류가 발생할 가능성이 높아진다. - 함수의 이름은 기능을 명확히 표현하는것이 좋다.
이를 통해 코드를 읽는 사람에게 함수의 목적을 쉽게 이해시킬수 있기 때문이다. - 함수는 되도록 입력-> 출력을 반환하는 구조로 설계하는 것이 좋으며,
함수 내부에서 전역 변수를 수정하는 것은 피해야 한다.
다양한 파이썬 내장 함수 알아보기
함수는 직접 만들어 낼수도 있지만 기본적으로 파이썬에서 제공하는 함수가 있으며, 이를 내장함수라 칭한다.
그동안 사용했던 print() , input() , len() 들도 내장 함수들이다.
내장함수 장점
- 별도의 정의나 모듈 임포트 없이 사용가능 작업을 단순화하고 개발속도를 올려줌
- 잘 테스트된 함수이기 때문에 내가 만들어낸 함수보다 성능이나 정확성 면에서 신뢰할수 있다.
- 내장함수를 사용하면 코드가 명확하고 읽기 쉬워짐
자주 사용하는 내장 함수들
print() 함수 : 출력하기
데이터를 화면에 출력하는 가장 기본적인 함수
input() 함수 : 사용자 입력받기
사용자로부터 입력을 받을때 사용하며 , 입력된 값은 항상 문자열로 변환된다.(숫자의 경우 int()로 변환할수있다)
"이름을 입력하세요"가 출력되고 '홍길동'을 입력하면 '안녕하세요, 홍길동님!' 이 출력된다
len() 함수 : 길이 구하기
문자열,리스트,튜플 등의 길이를 구하는 데 사용된다.
type() 함수 : 데이터 타입 확인하기
변수나 값의 데이터 타입을 반환한다. 어떤 데이터 타입인지 확인 할때 유용하다.
sum() 함수 : 합계 구하기
리스트나 튜플의 경우 사용 모든 요소를 더한 값을 반환하며,
내부 요소들이 사칙연산을 통해 동작 할 수 있을 때 돌아감.
min() 과 max() 함수 : 최소 값과 최대값 찾기
min()은 함수에서 가장 작은 값을 , max() 함수는 가장 큰 값을 반환한다.
min()과 max()는 리스트,튜플,셋 과 같이 숫자열이 작동하는 모든 컬렉션에서 사용이 가능하다.
sorted()함수 : 정렬하기
컬렉션 요소를 정렬한 새로운 리스트를 반환한다. 기본적으로는 오름차순이며 ,
옵션을 사용해 내림차순으로도 정렬할수 있다.
*하단의 numbers1.sort()를 사용하는 방법도 있으나 이 방법의 경우 변수 자체의 값을 정렬시킨다. *
abs()함수 :절대값 구하기
절대값을 반환한다 . 음수는 양수로 변환되며, 양수는 그대로 반환된다.
"문자열"은 int나 float로 변환하여 사용해야함 .
round()함수 :반올림하기
함수는 숫자를 지정된 자릿수 까지 반올림 한다.
함수기본구조 예시
물어본 이름을 출력해보고 싶어서 이생각 저생각
이게 정답
이렇게도 가능
매개변수
매개변수는 인수를 처리하기위한 변수 인수는 매개변수에 할당되고 함수에 사용됨
매개변수는 함수를 정의 할때 인수는 함수를 호출할때
3,5=입력값 a,b = 매개변수
반환값
함수작업완료후 호줄된 위치로 돌려줌
함수 만들기
내장 함수 뿐만 아니라 내가 직접 원하는 함수를 만들어 낼수있으며,
매개변수 ,반환값, 기본값 그리고 가변 매개변수까지 숙지하고 넘어간다.
기본개념
함수를 정의 하려면 def 키워들 사용한다.
함수 이름을 지정하고 필요한 경우 매개변수를 정의한다.
함수는 필요한 작업을 수행한 후, 반환값을 돌려 줄 수 있다.
기본 구조
def 함수 이름 (매개변수)
return 반환값
매개변수
매개변수는 함수가 호출 될때 입력받는 값(인수)를 처리하기 위해 사용되는 변수 위의 예시에서는 name이 매개변수 이며,
함수가 호출 될때 서숭문이라는 값이 name에 전달 된다.
다중 매개변수
함수는 여러개의 매개 변수를 가질수 있고, 각 매개 변수는 콤마(,)로 구분한다.
반환값
함수가 작업을 완료한 후 , 호출된 위치로 돌려주는 값을 말한다.
위 예시에서 square 함수는 n의 제곱을 계산하고, 그 결과를 반환한다.
복수 반환값
함수가 여러 값을 반환 할수 있으며 , 이때 반환값은 튜플로 반환한다.
이 예시에서는 calculate 함수가 합과 차를 동시에 반환하며 , 이를 각각 s와 d 객체에 할당한다.
반환값이 없는 함수
함수 return문을 생략하거나 반환값이 없이 return만 사용하면 함수는 none를 반환한다.
기본값
기본값을 사용하면 , 함수 호출시 인수를 생략할수 있다. 기본값은 함수 정의시 매개변수에 미리 지정된 값을 의미한다.
이 예시에서 name 매개변수는 기본값으로 "누구라"를 가지며, 함수 호출시 인수를 전달하지 않으면 "누구라"가 사용 된다.
다중 기본값
여러 매개 변수에 대해 기본값을 가질수 있다.
단, 기본값이 있는 매개변수는 항상 기본값이 없는 매개변수 뒤에 와야한다.
가변 매개변수
함수가 정해지지 않은 개수의 인수를 받을수 있도록 한다.
*args와 *kwargs이다.
*args :임의의 위치 인수 받기
위치 인수의 튜플을 받는다. 인수의 개수가 정해지지 않았을때 유용하다.
이 예시에서 add 함수는 가변 인수 *args를 통해 임의의 개수의 숫자를 받아 모두 더한 결과를 반환한다.
*kwargs :임의의 키워드 인수 받기
위치 인수의 딕셔너리를 받는다. 인수의 이름과 값을 딕셔너리 형태로 처리한다
이 예시에서 print_info 함수는 **kwargs를 통해 전달된 키워드 인수들을 딕셔너리로 받아 출력한다.
모듈이란
모듈은 파이썬에서 관련된 함수,클래스,변수 등을 하나의 파일에 모아놓은 코드 묶음.
모듈의 장점으로는 한번 작성한 코드를 여러 프로그램에서 재사용할수있고
작은 단위로 나누어 관리할수 있으며 , 각기 다른 이름 공간을 가지므로, 이름 충돌을 피할수 있다.
모듈 불러오기
import 키워드를 사용하면 다른 파일에 있는 모듈을 불러와 사용할수 있다.
이 예시에서 math 모듈을 불러와 그 안에 있는 sqrt 함수를 사용해 16의 제곱근을 구하였다.
모듈을 불러와 as로 별칭을 붙일수 있다
from 키워드 :모듈에서 특정 항목만 불러오기
from 키워드를 사용하면 모듈 전체가 아닌 모듈내의 특정 함수,클래스,변수를 선택적으로 불러 올수있다.
이 예시에서는 math 모듈에서 sqrt 함수만 불러와 사용하였다.
콤마(,)를 사용하여 여러 항목을 동시에 불러 올수도 있으며,
*로 모듈내의 모든 항목도 불러올수있다.
*을 사용하는것은 코드의 가독성을 떨어트릴수있고, 이름 충돌을 일으킬수있으므로 필요한 경우에만 사용해야함
파이썬 패키지
패키지는 여러 모듈을 논리적으로 묶음 디렉터리 구조
모듈을 체계적으로 관리하며, 다른프로젝트에서도 재사용할수 있게 해준다.
패키지의 장점
- 코드의 모듈화 : 코드를 기능별로 나누어 관리 할수있다.
- 재사용성 : 한번 작성한 패키지는 다른 프로젝트에서도 재사용이 가능하다.
- 이름 공간 관리 : 패키지를 사용하면 이름 충돌을 피할수 있다.
패키지는 일반적으로 다음과 같은 구조를 가진다.
mypackage/ # 패키지의 최상위 디렉터리
__init__.py # 패키지를 초기화하는 파일 (필수)
module1.py # 첫 번째 모듈
module2.py # 두 번째 모듈
subpackage/ # 서브 패키지 (하위 패키지)
__init__.py # 서브 패키지 초기화 파일
submodule.py # 서브 패키지 내의 모듈
__init__파일: 이파일은 패키지로 인식되기 위해 필요하다.
패키지 설치 방법
파이썬에서는 외부 패키지를 설치하여 기능을 확장할수있으며 ,
이를 위해 패키지 관리자 pip 를 사용한다.
VSCode 기준 패키지를 설치 할때는
터미널에 작성을 하며 , pip install 패키지이름 으로 쉽게 설치 할수있다.
pip list 로 설치된 패키지 목록을 확인할수 있다.
pip install --upgrade 패키지이름 으로 설치된 패키지를 최신버전으로 업그레이드 할수 있다.
pip uninstall 패키지이름 으로 설치된 패키지를 제거할수있다.
가상 환경과 패키지 관리
프로젝트별로 독립된 파이썬 실행 환경을 만드는 도구이며, 가상환경을 사용하면 패키지 간의 충돌을 방지할수있다.
동일하게 터미널에서 작동한다.
python -m venv 가상환경이름 으로 가상환경을 생성할수 있다.
가상환경이름\\scripts\\activate 로 가상환경을 활성화 시킬수있다.
deactivate 로 가상환경을 비활성화 시킬수있다.
예외처리 개념
- 에러 (error) : 프로그램이 실행 중에 발생하는 문제로 종종 프로그램이 비정상적으로 종료되게 만든다.
예를 들어 파일을 열려고 하는데 해당 파일이 없거나, 숫자를 0으로 나누는 경우 발생 할수 있다. - 예외 (exception) : 에러의 한 종류로 , 예외가 발생하면 프로그램이 멈추고 에러 메시지를 출력한다.
하지만 예외는 예외 처리를 통해 프로그램이 멈추지 않고 에러를 처리하며 계속 실행되게 할수있다.
예외처리의 중요성과 활용
- 프로그램이 예기치 않은 상황에서도 안정적으로 동작하도록 만들수있다.
- 디버깅에 도움된다.
- finally 블록을 통해 리소스를 적절히 정리함으로 자원 누수를 방지할수있다.
이러한 에러들은 프로그램을 강제로 종료시키지만 .예외 처리를 통해 방지할수있다.
try, except 예외 처리의 기본 구조
파이썬에서 예외를 처리하기 위해 try와 except 블록을 사용한다.
try블록 안에 예외가 발생할 가능성이 있는 코드를 작성하고,
except 블록에서 그 예외를 처리한다.
이 예시에서 try 블록의 코드가 실행되다가 zerodivisionerror 예외가 발생하면, except 블록의
코드가 실행되어 "0으로 나눌 수 없습니다!"라는 메세지를 출력한다.
이런식으로 각각의 except 블록을 사용하여 여러 예외를 처리할수 있다.
except에 따로 에러코드를 작성하지 않는 경우 어떤 예외가 발생하든 , "예외가 발생했습니다" 라는 메세지가 출력된다
그뜻은 위의 2개의 예시는 except 에 작성된 에러코드가 발생할시에만 작동한다.
finally 항상 실행되는 코드 블록
finally 블록은 예외 발생 여부에 상관없이 항상 실행되는 코드블록이다.
이 예시에서 파일이 존재 하지 않더라도 ,finally블록이 실행되어 파일을 닫고 "파일을 닫았습니다: 메시지를 출력한다.
finally 블록은 예외가 발생하지 않더라도 실행된다.
이 예시에서는 예외가 발생하지 않지만 ,
finally 블록이 실행되어 "프로그램 종료" 라는 메시지가 출력된다.
클래스 , 객체 : 객체지향
클래스는 객체를 만들기위한 설계도라고 할수 있다.
클래스는 속성과 메서드로 구성되며 , 속성은 객체의 데이터를 메서는 객체의 동작을 정의한다.
객체는 클래스의 인스턴스로 , 클래스라는 설계도로 부터,
실제로 생성된 구체적인 데이터와 기능을 가지는 실체이다.
객체지향 프로그램 장점
재사용성, 한번 정의한 신경망 구조를 여러곳에서 재사용 가능함.
버그수정,기능추가,유지보수가 쉽다
프로그램이 유연해짐.
이 예시에서 Dog는 클래스이고, my_dog는 Dog클래스의 객체이다.
my_dog 객체는 name과 breed라는 속성을 가지고 bark()라는 메서드를 호출 할수있다.
객체지향 프로그래밍( OOP)의 핵심 개념
1. 캡슐화 - 객체의 속성과 메서드를 하나로 묶고 ,일부를 외부에 감추어 객체 내부의 구현을 숨기는 원칙.
이를 통해 데이터의 무결성을 보호하고 , 외부에서의 직접 접근을 제한한다.
2.상속 - 부모클래스를 기반으로 새로운 클래스를 만드는 방법. 부모의 속성과 메서드를 자식이 물려받아 사용할수 있으며,
확장, 수정이 가능하다.
3.다형성- 동일한 이름의 메서드가 여러 객체에서 다르게 동작할수 있는 원칙.
이 예시에서 같은 이름의 speak() 메서드가 dog객체와 cat 객체에서 서로 다른 방식으로 구현되는걸 확인 할수있다.
4.추상화- 추상화는 복잡한 시스템을 단순화 하여, 필요한 부분만 보여주고 나머지는 감추는 원칙.
PyToch와 nn.Module 에서의 클래스 사용
pytoch와 같은 딥러닝 라이브러리에서는 클래스를 사용해 신경망을 정의하고 관리한다.
특히, pytoch의 nn.module 클래스는 모든 신경망 모듈의 기본 클래스로
사용자 정의 신경망을 만들때 상속받아 사용한다.
이 예시에서 simpleNN 클래스는 nn.Module을 상속 받아 신경망을 정의하고 있다.
__init__ 메서드에서 신경망 계층을 정의하고 , forward 메서드에서 입력데이터가 계층을 통과 하는 순전파를 정의한다.
클래스 만들기와 속성,메서드 살펴보기
클래스 정의 기본구조
아직 구체적인 속성이나 메서드를 정의하지 않았고, 추후 구체적으로 클래스를 구성하기 위한 틀로 사용할수있다.
이 예시에서 Dog 클래스는 name과 breed라는 두가지 속성을 가진다.
self는 객체 자신을 참조하는 키워드로 , 각 객체가 고유한 속성 값을 가지게 한다.
이 예시에서 bark 메서드는 Dog 클래스의 name 속성을 사용하여 "짖습니다." 라는 메세지를 반환한다.
이 예시에서 Dog 클래스는 2개의 속성 (name , breed)과 두개의 메서드 (bark,introduce)를 가진다.
introduce 메서드는 개의 이름과 품종을 소개하는 역할을 한다.
만든 클래스로 객체 만들기
이 예시에서 Dog 클래스의 객체인 my_dog를 생성하고, Buddy와 Golden Retriever 라는 속성을 부여해 주었다.
이후 bark , introduce 메서드를 호출하여 결과를 출력한다.
이 예시처럼 하나의 클래스로 dog1 dog2 2개의 객체를 생성하고, 각각의 bark 메서드를 호출하여 출력할수 있다.
클래스 심화 : 매직 메서드 , 클래스 메서드 , 정적 메서드
매직 메서드
매직 메서드는 파이썬에서 특별한 역할을 수행하는 미리 정의된 메서드를 말한다.
이 메서드들은 __inti__ 처럼 두개의 밑줄 __ 로 시작하고 끝나며 클래스의 특정 동작을 제어,변경 가능하다.
1.__init__
객체가 생성될 때 호출되는 생성자 메서드로 , 객체의 초기화를 담당
2.__repr__
객체의 "공식적인" 문자열 표현을 반환하는 메서드로 ,주로 디버깅을 위해 사용된다.
3.__add__
객체 간의 덧셈 연산을 정의하는 메서드로 , + 연산자를 재정의 할수 있다.
4.__str__
객체의 "공식적인" 문자열 표현을 반환하는 메서드로 , 주로 디버깅을 위해 사용된다.
이 예시에서 __str__ 메서드는 객체를 출력할 때 사용되는 문자열을 정의하고 ,
__add__ 메서드는 두 Person 객체의 나이를 더하는 기능을 정의한다.
클래스 메서드 , 정적 메서드
클래스 메서드 - 클래스 자체를 인수로 받는 메서드로, 클래스 변수와 클래스 자체에 대한 작업을 수행할 때 사용된다.
@classmethod 데코레이터를 사용해 정희하며, 첫 번째 매개변수로 cls를 받는다 (cls는 클래스 자신)
이 예시에서 increment 메서드는 클래스 변수 class_variable의 값을 증가 시킨다 .
이 메서드는 객체가 아닌 클래스 자체에서 호출된다.
정적 메서드 - 정적 메서드는 클래스나 객체와 관련이 없지만 , 클래스의 맥락에서 의미가 있는 메서드.
@staticmethod 데코레이터를 사용해 정의하며 , 첫번째 매개변수로 self나 cls를 받지 않는다.
이 예시에서 add 메서드는 클래스나 객체의 상태와 상관없이 단순히 두 수를 더하는 역할을 한다.
따라서 정적 메서드로 정의한다.
파일 다루기
파일 열기 : open() 함수로 파일을 열수 있다.
file_object = open("파일이름", "모드")
파일이름 : 열고자하는 파일의 경로와 이름
모드 : 파일을 여는 방식을 지정
모드
- "r" = 읽기 모드(기본값). 파일이 존재 하지 않으면 오류 발생
- "w" = 쓰기 모드 .파일이 존재하지 않으면 새로 만들고 , 존재하면 내용을 덮어 쓴다.
- "a" = 추가 모드 .파일 끝에 데이터를 추가.
- "b" = 바이너리 모드 .이진 파일을 읽거나 쓸때 사용하며 다른모드와 함게 사용된다.("rb","wb")
파일 닫기 : close() 메서드
파일 처리가 끝나면 close() 메서드를 호출해 파일을 닫아야 한다.
닫지 않으면 데이터 손실이나 파일 잠금과 같은 문제가 발생할수 있다.
파일 열기, 파일 닫기 예시
자동으로 파일 닫기 : with 문
with 문을 사용하면 , 블록이 끝날때 자동으로 파일이 닫힌다.(안전하고 간편하다)
이 방식은 파일이 자동으로 닫히기 때문에 close()를 호출할 필요가 없다.
파일읽기
파일을 읽는 방법은 여러가지가 있으며, 내용을 모두 읽거나 , 특정 줄만 읽을 수도 있다.
read() 메서드 -파일 전체내용을 읽어옴.
readline() 메서드 -파일에서 한줄 씩 읽어옴 .
readlines() 메서드 -파일의 모든 줄을 리스트 형태로 읽어옴 .
파일 쓰기
write() 메서드 - 파일에 문자열을 작성한다 . 파일이 이미 존재하면 내용이 덮어 씌워진다.
writelines() 메서드 - 리스트에 담긴 여러 줄을 파일에 한꺼번에 쓴다.
파일 처리 시 주의사항
파일 경로 확인- 잘못된 경로를 지정하면 파일을 열수 없다.
파일 모드 확인- 모드를 잘못 설정하면 의도치 않게 덮어써지는 경우가 있다.
파일 닫기- 닫지 않으면 메모리 누수, 파일잠금 등의 문제가 발생할수있다.
예외 처리- 예외 처리를 통해 파일이 존재하지 않거나 접근 권한이 없는경우를 대비해야한다.
오늘의 회고
아직 기본강의 인데 이걸 내가 할수있을까 라는 생각이 많이든다.
그 와중에도 실습하고 예시를 분석하면서 왜 코드가 저렇게 작성되었는지
파악하고 있으면, 적성에 맞는거 같기도 하고...?
워낙 무언가를 분석하고 만들어내는걸 좋아하는 성격이라 그런가 싶다.
그럼에도!! 어려운 부분들이 많아서 12시간이라는 시간이 항상 부족하다.
이번 개천절에 실습 예제들을 찾아서 복습하는 시간을 가져야 될거같다.
아직 각종 단어, 용어들이 입에 붙지 않고 어색해서, 튜터님이나 팀원들끼리
소통할 때 내가 생각하는 바를 정확하게 전달하기 많이 어려운데.
익숙해 질때 까지 좀더 노력하자.
'나의개발일지(TIL)' 카테고리의 다른 글
| [스파르타 내일배움캠프]6일차 -파이썬 라이브러리 (0) | 2024.10.10 |
|---|---|
| [스파르타 내일배움캠프]5일차 -파이썬 라이브러리 (2) | 2024.10.07 |
| [스파르타 내일배움캠프]4일차 -파이썬 라이브러리 (0) | 2024.10.04 |
| [스파르타 내일배움캠프]3일차 -인공지능을 위한 파이썬 (6) | 2024.10.02 |
| [스파르타 내일배움캠프]1일차 -인공지능을 위한 파이썬 (2) | 2024.09.30 |