[데이터 취업 스쿨 스터디 노트] 2. 파이썬 중급

WHIT·2024년 4월 21일
0

Data Scientist

목록 보기
3/18

< 수강분량 : 파이썬 중급(1~9), 파이썬 중급문풀(1~8) >

✅ 함수

  • 함수란?
    1) 파이썬의 함수는 수학의 함수와 동일함
    2) 내장함수 / 사용자 함수로 구분
    3) 특정 기능을 재사용하기 위해 사용
#함수 선언
def 함수명(): #함수명은 보통 동사로 작명
	실행문
    
#함수 호출
함수명() #호출을 꼭 해야 실행됨
  • 인수와 매개변수
    1) 인수(parameter) : 함수를 호출할 때 함수에 전달하는 입력값
    2) 매개변수 : 함수에 입력으로 전달된 값을 받는 변수, 호출부와 선언부를 매개
    3) 인수와 매개변수의 갯수 일치 필수 (만약, 갯수가 확실하지 않다면 *numbers 활용 가능)
    4) return 키워드를 이용하면 함수 실행 결과를 호출부로 반환할 수 있음
    5) 함수가 return을 만나면 실행을 종료함
def greet(customer): #customer : 매개변수
	print(f'{customer} 고객님 안녕하세요!)
    
greet('홍길동') #홍길동 : 인수
  • 전역변수와 지역변수
    1) 전역변수 : 함수 밖에 선언된 변수로 어디에서나 사용은 가능하지만 함수 안에서 수정할 수는 없음
    2) 지역변수 : 함수 안에 선언된 변수로 함수 안에서만 사용 가능함
    3) global 을 사용하면 함수 안에서도 전역변수의 값 수정 가능

  • 중첩함수 : 함수 안에 또 다른 함수가 있는 형태, 내부 함수를 함수 밖에서 호출할 수는 없음

  • lambda 키워드를 이용하면 함수 선언을 보다 간단하게 할 수 있음

#함수명 = lambda 매개변수 : 식
getTriangleArea = lambda n1, n2: n1 * n2 / 2
getSquareArea = lambda n1, n2: n1 * n2
getCircleArea = lambda r: r * r * 3.14

✅ 모듈과 패키지

  • 모듈이란?
    1) 모듈은 함수가 선언되어 있는 파이썬 파일
    2) 이미 만들어진 훌륭한 기능으로 사용자는 쉽게 사용할 수 있음
    3) 내부모듈(내장모듈) / 외부모듈(예: pandas, numpy) / 사용자모듈
    4) import 모듈명 으로 호출
    5) as 키워드를 통해 모듈 이름 단축 가능
    5) from ~ import 키워드를 통해 모듈의 특정 기능만 사용 가능 (이후엔 모듈명 생략 가능)
from calculator import add
from calculator import sub

from calculator import * #모든 기능 가져오기
from calculator import add, sub #일부 기능 가져오기

add(10,20)
sub(10, 20)
  • 전역변수 _ name _ 의 활용
#__name__ 에는 모듈 이름(파일명)이 저장되거나, 실행파일인 경우 '__main__'이 저장됨

#아래와 같은 조건문을 통해 일정 기능을 실행파일일 때만 실행하도록 설정 가능
if __name__ == '__main__':
	실행문
    

-패키지란?
1) 모듈을 묶어서 관리하는 것
2) from 패키지 import 모듈
3) site-packages : 어디서나 접근가능한 모듈
4) 수학, 난수, 시간 모듈은 코딩할 때 유용하게 사용

✅ 객체 지향 프로그래밍

  • 객체란?
    1) 객체 (object) = 속성 (Attibute) + 기능 (Function)
    2) 객체는 클래스에서 생성 (메모리에 생성된 객체가 유기적으로 돌아감), 클래스는 객체를 만드는 틀이라고 보면 됨
    3) 객체 사용의 장점 : 코드 재사용(확장성), 모듈화에 좋음
    4) 객체의 속성은 변경 가능
    5) 객체와 메모리 : 변수는 객체의 메모리 주소를 저장하고 이를 이용해서 객체를 참조 (레퍼런스 변수) -> 얕은 복사
#클래스 만들기
class Car:

    #속성(변수)
    def __init__(self, col, len): #객체 초기화
        self.color = col
        self.length = len

    #기능(함수)
    def doStop(self):
        print('STOP!!')
        
#객체 생성
# car1 = Car('red', 200)
# car2 = Car('blue', 300)
  • 얕은 복사와 깊은 복사
    1) 얕은 복사 : 객체 주소를 복사하는 것으로 객체 자체가 복사되지 않음
    2) 깊은 복사 : 객체 자체를 복사하는 것으로 또 하나의 객체가 만들어짐

  • 클래스 상속 : 다른 클래스의 기능을 내 것처럼 사용
    1) _ init _() 가 속성을 초기화함
    2) 상위 클래스의 속성을 초기화하기 위해 super() 사용
    3) 다중상속 : 2개 이상의 클래스 상속. 잘 사용하면 중복되는 코드를 줄일 수 있으나 남발하면 다중상속의 늪에 빠질 수 있음.
    4) 추상 클래스 : 상위 클래스에서 하위 클래스에 메서드 구현을 강요

#속성 초기화
class NewRobot(Robot):
    def __init__(self, c, h, w):
        super().__init__(c, h, w)

    def fire(self):
        print('레이저 발사!!')
#추상 클래스
from abc import ABCMeta
from abc import abstractmethod

class Airplane(metaclass=ABCMeta):

    @abstractmethod
    def flight(self):
        pass
  • 예외(exception)란?
    1) 문법적인 문제는 없으나 실행중 발생하는 예상하지 못한 문제
    2) 예외처리 : 예상하지 못한 예외가 프로그램 전체 샐행에 영향이 없도록 처리함
    3) Exception 클래스 : 예외 관련 클래스는 Exception 클래스를 상속
#예외처리
try:
    print(n1 / n2)
except:
    print('예상치 못한 문제가 발생했습니다!')
    print('다음 프로그램이 정상 실행됩니다.')
    
#raise 키워드로 예외발생 시키기도 가능
def divCalculator(n1, n2):

    if n2 != 0:
        print(f'{n1} / {n2} = {n1 / n2}')
    else:
        raise Exception('0으로 나눌 수 없습니다.')

num1 = int(input('input number1: '))
num2 = int(input('input number2: '))

try:
    divCalculator(num1, num2)
except Exception as e:
    print(f'Exception : {e}')

✅ 텍스트 파일 쓰기

  • 기본함수
#파일 열기
file = open('파일 경로', 'w') #쓰기 전용 (파일이 있으면 덮어씌움)
file = open('파일 경로', 'a') #쓰기 전용 (파일이 있으면 덧붙임)
file = open('파일 경로', 'x') #쓰기 전용 (파일이 있으면 에러 발생)
file = open('파일 경로', 'r') #읽기 전용 (파일이 없으면 에러 발생)

#읽기 또는 쓰기
file.read()
file.write()
file.readline() #한줄 읽기
file.readlines() #여러줄 읽기

file.writelines() #리스트 또는 튜플 데이터를 파일에 쓰기 위함

#파일 닫기
file.close()

#with ~ as문 활용하면 close() 생략가능
with open(uri + 'languages.txt', 'r') as f:
     print(f.read())

with open(uri + 'scores.txt', 'a') as f:
    print(scoreList, file=f)

✏️ 어려웠던 부분

  • *s 를 사용하여 함수를 작성하는 부분이 어려웠음
  • for 을 활용하여 s의 item을 하나씩 불러오는 방식이 익숙치 않았음
def exampleResult(*s):

    passAvgScore = 60; limitScore = 40

    def getTotal():
        totalScore = sum(s)
        print(f'총점: {totalScore}')
        return totalScore

    def getAverage():
        avg = getTotal() / len(s)
        print(f'평균: {avg}')
        return avg

    def printPassOrFail():
        for i in s:
            print(f'{i}: Pass') if i >= limitScore else print(f'{i}: Fail')

    def printFinalPassOrFail():

        if getAverage() >= passAvgScore:
            if min(s) >= limitScore :
                print('Final Pass!!')
            else:
                print('Final Fail!!')
        else:
            print('Final Fail!!')

"이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다."

0개의 댓글