Day6. 5/8일 파이썬 중급 01

이동은·2023년 5월 8일
post-thumbnail

오늘의 목표

  • 파이썬 중급 챕터 6까지 끝내기

오늘의 달성 목표

  • 파이썬 중급 챕터 5까지 완료

오늘을 마치며

  • 함수를 들어가면서 슬슬 다시 어려워지고 있다.
    주말에 복습을 하면서 다시 복기하는 연습을 해야겠다.

함수

  • 함수는 수학의 함수와 동일하다.
    definition의 def addFun(x, y): <- 함수선언
    return x + y
    • 함수는 피이썬에서 제공하는 내장함수와
      사용자가 직접 선언하는 사용자 함수가 있다.
    • 함수의 예
  • 반복 함수 사용 이유는 특정 기능을 재사용하기 위해서 사용한다.
  • def addCal():
  • round()함수를 통해서 소수점 자리를 제한할 수 있음.
  • 함수 안에 또다른 함수를 호출할 수 있음

인수와 매개변수(매우중요!!!!)

  • 함수 호출 시 함수에 데이터를 전달할 수 있다.
  • 인수와 매개변수 개수는 항상 일치해야 한다.
  • 개수가 정해져 있지 않았을때 '*'를 이용하여 보류가능 (type은 tuple 형태로 나옴)

데이터 반환(매우중요 2!!!)

  • 'return' 키워드를 이용하면 함수 실행 결과를 호출부로 반환할 수 있다.
  • return 다음에 나오는 데이터는 출력되지 않는다.

전역 변수와 지역 변수

  • 함수 밖에 선언된 변수로 어디에서나 사용은 가능하지만 함수 안에서 수정할수는 없다.
  • global을 사용하면 함수 안에서도 전역변수의 값을 수정할 수 있다.
  • 함수 안에서 선언된 변수로 함수 안에서만 사용 가능하다.

중첩함수

  • 내부함수를 내부함수 이외에 함수 밖에서는 불가능하다.

lambda 함수

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

모듈

  • 이미 만들어진 훌륭한 기능으로 사용자가 쉽게 사용 가능

    모듈의 종류

    • 내부모듈 : 파이썬 설치 시 기본적으로 사용할 수 있는 모듈
    • 외부모듈 : 별도 설치 후 사용 할 수 있는 모듈
    • 사용자 모듈 : 사용자가 직접 만든 모듈

    • sample 모듈을 이용해 난수 중에서 범위를 지정해서 출력할 수 있음 그 데이터는 리스트 형태로 반환된다.

모듈 만들기

  • 모듈은 특정 기능을 가지고 있는 파이썬 파일을 말한다.
  • import 키워드를 이용하여 사용자 전용 모듈을 만들 수 있다.
  • import , as를 이용하여 단어를 줄여서 사용할 수 있음(import calculator as cal)
  • from~as 키워드를 이용해서 모듈의 특정 기능만 사용할 수 있다.
  • from calculator import * 을 통해서 add, sub, mul, - div 모두를 가져올 수 있음 또는 ' , '를 통해서도 가능함.

import, as, from~as

  • import를 통해서 모듈을 가져온다.
  • import as를 통해서 모듈명을 줄여서 사용한다.
  • from~as를 통해서 필요한 모듈만 가져와서 반환한다.
    (단, from~as를 사용하면 모듈명이 필요없음)

name 전역변수

  • name에는 모듈 이름이 저장되거나 'main'이 저장된다.

패키지를 사용하는 이유

  • 파일을 용도에 따라 분리하여 구분할 수 있음
    ex)음원 파일, 영화 파일, 독서 파일, 문서 파일 등을 나누어서 관리할 수 있음

자주 사용하는 모듈

  • 수학 관련 함수

  1. listVar = [2, 5, 3.14, 50, 10, 2]
    #print(f'sum(listVar): {sum(listVar)}')

  2. 최댓값
    listVar = [2, 5, 3.14, 50, 10, 2]
    print(f'sum(listVar): {max(listVar)}')

  3. 최소값
    listVar = [2, 5, 3.14, 50, 10, 2]
    print(f'sum(listVar): {min(listVar)}')

  4. 거듭제곱
    print(f'pow(13, 2): {pow(13, 2)}')
    print(f'pow(13, 3): {pow(13, 3)}')
    print(f'pow(13, 4): {pow(13, 4)}')

  5. 반올림
    print(f'{round(3.141592, 1)}')
    print(f'{round(3.141592, 2)}')

import math

  1. 절대값
    print(f'math.fabs(-10): {math.fabs(-10)}')
    print(f'math.fabs(-10): {math.fabs(-0.12345)}')

  2. 올림
    print(f'math.ceil(-10.903): {math.ceil(-10.903)}')
    print(f'math.ceil(10.903): {math.ceil(10.903)}')

  3. 내림
    print(f'math.floor(10.903): {math.floor(10.903)}')
    print(f'math.floor(-10.903): {math.floor(-10.903)}')

  4. 버림
    print(f'math.trunc(10.903): {math.trunc(10.903)}')
    print(f'math.trunc(-10.903): {math.trunc(-10.903)}')

  5. 최대공약수
    print(f'math.gcd(14, 21): {math.gcd(14, 21)}')

  6. 팩토리얼
    print(f'math.factorial(10): {math.factorial(10)}'

  7. 제곱근
    print(f'math.sqrt(12): {math.sqrt(12)}')

import time

lt = time.localtime()
print(f'time.localtime(): {lt}')
print(f'lt_tm_year: {lt.tm_year}')
print(f'lt_tm_year: {lt.tm_mon}')
print(f'lt_tm_year: {lt.tm_mday}')
print(f'lt_tm_year: {lt.tm_hour}')
print(f'lt_tm_year: {lt.tm_sec}')
print(f'lt_tm_year: {lt.tm_wday}')

객체지향 프로그래밍

  • 프로그래밍의 꽃이다!
  • 객체를 이용한 프로그램으로 객체는 속성과 기능으로 구성된다.
  • 클래스는 객체를 만들기 위한 하나의 틀이다.

객체 사용의 장점

  • 코드 재사용과 모듈화에 좋다?
    ex) 자동차를 만들때 1) 배터리 일체형, 2) 배터리 교체형, 3) 배터리 충전형으로 나눠지는데 부품 결합도가 낮은 교체형이 가장 이상적인 프로그래밍

얕은 복사

  • 객체 자체가 아닌 객체의 메모리 주소를 복사하여 데이터를 출력시킴
tc1 = Teamclass(10, 'Hi')
tc2 = tc1

tc1.printClsInfo()
tc2.printClsInfo()

tc2.number = 30
tc2.str = 'Adios'

tc1.printClsInfo()
tc2.printClsInfo()

깊은 복사

  • 객체 자체를 복사하여 데이터를 출력함.
import copy

tc1 = Teamclass(10, 'Hi')
tc2 = copy.copy(tc1)

tc1.printClsInfo()
tc2.printClsInfo()

tc2.number = 30
tc2.str = 'Hello'

tc1.printClsInfo()
tc2.printClsInfo()

import copy
scores = [9, 8, 4, 3, 1]
scoresCopy = []

scoresCopy = scores
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')

for s in scores:
scoresCopy.append(s)
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')

scoresCopy.extend(scores)
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')

scoresCopy = scores.copy()
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')

scoresCopy = scores[:]
print(f'id(scores): {id(scores)}')
print(f'id(scoresCopy): {id(scoresCopy)}')```

클래스 상속 기능

  • 상속받을 클래스에 상속 해줄 클래스를 붙여 넣으면 된다.
  • 클래스에서 상속 기능은 굉장히 중요한 기능이다.
  • 다중 상속은 꼭 필요한 경우에만 사용한다.

생성자

  • 객체를 생성할 때 속성을 초기화하는 기능이 있음
  • 객체가 생성될 때 생성자를 호출하면 init()가 자동 호출된다.
  • 상위 클래스의 속성 상속을 위해 super()를 이용하여 데이터를 출력할 수 있다.

오버라이딩

  • 하위 클래스에서 상위 클래스의 메서드를 재정의(override)한다.

추상클래스

  • 상위 클래스에서 하위 클래스에 메서드 구현을 강요한다.
  • 추상 클래스를 사용하는 이유는 사용자의 입맛에 따라 변환하여 사용하라는 의미이다.
  • 추상 클래스를 사용하기 위해서는 모듈을 이용해야 하는데(from abc import ABCMeta
    와 from abc import abstractmethod를 선언해야함) 그리고 @ abstractmethod를 선언해줘야 한다.

예외란?

  • 문법적인 문제는 없으나 실행 중 발생하는 예상하지 못한 문제이다.

예외 처리

  • 발생된 예외를 별도 처리함으로써 프로그램 전체 실행에 영향이 없도록 처리함
  • try~except을 사용하여 처리가능
  • else를 사용하여 예외가 바랭하지 않은 경우 실행하는 구문이다.
  • try ~ except ~ else 구문을 사용할때 except를 제외하고 else문 사용 불가능 else는 생략 가능.
  • finally는 예외 발생과 상관없이 항상 실행한다.

Exception 클래스

  • Exception as e(error)를 통해서 이용 가능하다.
  • raise 키워드를 이용하면 예외를 발생 시킬 수 있다.
  • Exception as e + e.args[]함수를 통해서 예외 종류 나누기 가능

텍스트 파일

  • open(), read(), write(), close()를 이용한 텍스트 파일 다루기
  • w()는 쓰기 모드로 기존의 문자열을 덮어서 새로운 파일을 생성한다.
  • r()은 읽기 모드
  • 인코딩이 안맞을때 encoding='UTF8'로 해결할 수 있다.

파일 모드

  • 'w'(파일이 있으면 덮어씌움), 'a'(파일이 있으면 덧붙임),
  • 'x'(파일이 있으면 에러 발생)는 쓰기 전용
  • 'r'(파일이 있어야함)은 읽기전용

with ~ as문

  • with ~ as문을 이용하여 텍스트 파일 출력시 close()를 사용하지 않고 데이터를 출력할 수 있다.

writelines()

  • 리스트(list) 또느 튜플 데이터를 파일에 쓰기 위한 함수이다.
  • writelines()를 사용할때는 for문 필요없음

readlines()와 readline()

  • readlines()는 파일의 모든 데이터를 읽어들여 리스트 형태로 반환한다.
  • readline()는 한 행을 읽어서 문자열로 반환한다.
  • split()함수를 통해 데이터를 추가할 수 있고, stript()함수를 통해 데이터를 제거할 수 있음

[해당 글의 내용은 제로베이스 데이터스쿨의 강의 자료 내용 중 일부가 포함되어 있습니다.]

profile
또 다른 나를 찾아서

0개의 댓글