[Aiffel] 아이펠 4일차 개념 정리 및 회고

Gongsam·2021년 12월 30일
0

1. 파이썬 개념 정리

1) 생산성 vs 성능(performance)

  • 생산성이란 똑같은 기능을 하는 프로그램을 얼마나 빠르게 작성할 수 있느냐
  • 성능이란 언어의 종류와 상관없이 코드를 구성해 실행했을 때 얼마나 빨리 처리되는가를 나타냄
  • 생산성이 올라가면 성능이 떨어지고, 생산성이 떨어지면 성능이 올라가는 경향이 있음

    파이썬의 특성
    1. 높은 생산성
    2. 코드의 간결함
    3. 빠른 개발 속도
    4. 스크립트 언어

2) Generator

  • yield
    • 함수 안에서 yield를 사용하면 해당 함수는 제너레이터가 된다.
    • yield를 사용하면 현재 함수를 중단, 함수 바깥의 코드가 실행되게 한다.

이터레이터와 제너레이터 개념 다시 정리

3) Try - except


에러 처리를 위한 필수 과정이다.
에러가 발생할 경우 except 부분이 실행되고, 에러가 발생하지 않으면 try 부분이 실행된다.

a = 8
b = 0 

try:
    #실행 코드
    print(a/b)
		
except:
    print('에러가 발생했습니다.')
    b = b+1 #이런 식으로 except 부분에서 값을 수정해 결과값을 조정할 수 있다.
    print("값 수정 : ", a/b)

4) 시간 측정

time 모듈을 이용해서 측정할 수 있다.

import time
begin = time.time()  # 시작 시간 저장

a = 100
for i in range(100,0,-1):
	a -= 1
 
# 작업 코드
print("time :", time.time() - begin) # 결과는 '초' 단위 입니다.

5) Multiprocessing

컴퓨터가 작업을 처리하는 속도를 높여주는 방법 중 하나이다.
병렬처리는 4개의 문자열이 동시에 처리되어 저장되는 반면 순차처리는 말 그대로 순서를 지켜 처리된다.

출처: https://sebastianraschka.com/Articles/2014_multiprocessing.html
파이썬에서 병렬처리를 하기 위해선 multiprocessing 모듈을 이용한다.

6) lambda

런타임에서 생성해 활용 가능한 익명 함수. def를 이용해 이름을 정의하는 함수와 다르게 이름이 없다. 표현식의 형태를 띄어서 람다 표현식(lambda expression)이라고 부른다.

  • 익명 함수이기 때문에 그 자체로 호출이 불가능하다. 결과값을 사용하고 싶다면 변수에 할당해야 한다.
  • 변수에 할당하고 싶지 않다면 (lambda 함수)(인자) 이런 식으로 사용하면 된다.
(lambda x: x+1)(0)
>>> 1
  • 람다 표현식 안에선 새로운 변수를 할당할 수 없기 때문에 변수를 사용하려면 def 함수를 이용하는 것이 좋다.
    map, filter, reduce 등의 함수에서 자주 사용한다.
# map
num_list = [1, 2, 3]
num_list = list(map(lambda x: x+1, num_list))
print(num_list)
>>> [2, 3, 4]

# 조건부 식 사용하기 - if, else 반드시 둘 다 써야함
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(map(lambda x: str(x) if x % 3 == 0 else x, a))
>>> [1, 2, '3', 4, 5, '6', 7, 8, '9', 10]

# filter 조건에 해당하는 요소만 반환
list(filter(lambda x: x % 2, range(10)))  # 파이썬 2 및 파이썬 3
>>> [1, 3, 5, 7, 9]
# reduce - 누적해서 함수에 적용 시킴
from functools import reduce #python3 부터 내장함수가 아님 
reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])
>>> 10

7) 모듈과 패키지

  • 모듈
    함수, 변수, 클래스를 모아둔 파일. 코드의 저장소 모듈을 modulename.py의 형태.
  • 패키지 (라이브러리)
    여러 모듈을 하나로 모아둔 폴더. 설치는 pip install을 이용함

8) 절차 지향, 객체 지향

절차지향객체지향
일이 진행되는 순서로 프로그래밍객체를 먼저 작성하고 함수를 작성.객체 간 상호작용 가능
장점순서대로 읽고 이해하기 용이함코드 재활용이 쉬움. 코드 분석 쉬움, 아키텍처 변경 쉬움
단점순서대로 작성된 특성 상 한 오류가 연쇄적인 영향을 끼칠 가능성이 있어 유지보수가 어려움. 일반적으로 코드 길이가 길어 분석이 어려움객체 간의 상호작용으로 인해 설계에 많은 시간이 소비됨. 설계에 문제가 생기면 전반적으로 재구성을 할 필요가 생길 수 있음

9) 함수형 프로그래밍

  • 병렬 처리
    함수형 프로그래밍은 병렬 프로그래밍 측면에서 장점이 있음.
    하지만 문제가 있음: 하나의 데이터에 동시에 여러 함수가 접근한다고 가정을 했을 때 그 함수 중에 하나라도 기존 데이터를 수정하는 함수가 있으면, 기존 데이터로 출력을 예상할 수가 없게 됨
    -> 이 문제의 해결방법은? 순수성 유지
    함수형 방식은 내부 상태를 수정하거나 함수의 반환값에서 보이지 않는 다른 변경사항들을 만드는 부작용이 있는 함수를 사용하지 않는다. 부작용이 전혀 없는 함수를 순수 함수 라고 한다.

10) 파이썬 코드 스타일

코드 스타일 - The Hitchhiker's Guide to Python

PEP8 - Code lay-out

2. CS

1) 운영체제

  • 운영체제
    • 컴퓨터의 하드웨어를 관리하는 역할
    • 작업 관리, 데이터 관리, 프로그램 제어 등 모든 컴퓨터가 공통적으로 수행해야 할 기능들을 모아 만든 소프트웨어
    • CPU, 메모리 등의 복잡한 하드웨어를 잘 모르는 사람이라도 편리하고 효율적으로 컴퓨터 자원을 사용하도록 도와주는 프로그램
    • 컴퓨터가 처리해야 하는 복잡하면서도 공통적인 기능들을 알아서 처리해주어 사용자가 신경쓰지 않아도 되도록 만들어주는 프로그램
  • 우분투
    • Linux를 기반으로 만들어진 운영체제
    • Linux는 자유롭게 수정 및 재배포가 될 수 있는 오픈소스

정리: 우분투라는 운영체제 안에서 파이썬이라는 프로그래밍 언어로, 텐서플로우라는 딥러닝 프레임워크를 써서 여러가지를 배워나갈 예정

  • 커널이란?
    컴퓨터 운영체제의 핵심이 되는 컴퓨터 프로그램, 시스템의 모든 것을 완전히 통제함.

리눅스는 그 자체로 운영체제가 아니라, 커널임.
우리가 흔히 리눅스 운영체제라 부르는 것들은 리눅스를 커널로 사용하는 운영체제들을 가리킨다. 우분투나 Android, ChromeOS 말고도 Debian, CentOS, Red Hat Enterprise Linux 등 다양한 종류가 있다.

3. 오답

1) 프로그래머스

문자열 내림차순으로 배열하기

def solution(s):
    return ''.join(sorted(s, reverse=True))
  • sorted랑 sort 구분하기
  • reversed랑 reverse 구분하기
    => sorted, reversed는 함수, sort, reverse는 메소드

4. 회고

그동안 지나쳐왔던 개념이 많아서 정리하는데 시간이 오래 걸렸다. 제너레이터 개념은 오늘 처음 접했는데 이터레이터와 같이 이해해야할 거 같아서 나중에 코딩도장을 공부할 때 다시 보려고 한다. CS 개념이 부족함을 느껴서 책을 더 읽거나 해야할 것 같다.

profile
🐬 파이썬 / 인공지능 / 머신러닝

0개의 댓글