[AIFFEL] 21.Dec.30 - Advanced Python

Deok Jong Moon·2021년 12월 30일
0
post-thumbnail

오늘의 학습 리스트

LMS

  • 스크립트 언어 / 컴파일 언어의 개념
    1) 컴파일 언어 :
    . 실행 전 소스 코드를 컴파일하여 기계어로 변환 후 해당 파일을 실행
    . 이미 기계어로 변환된 것을 실행하므로 비교적 빠름
    . 컴파일 시점에 소스 코드의 오류를 잡기 쉬움
    . 같은 소스 코드도 다른 환경(PC, mobile 등)에서 실행하려면 다시 컴파일(기계어로 변환) 해야함
    2) 스크립트 언어:
    . 코드를 작성함과 동시에 인터프리터가 기계어로 번역하고 실행함
    . 코드 번역 과정이 있어 비교적 느림
    . 주 사용 목적이 뚜렷하게 개발되어 사용하기 쉬운 편
    . 명령줄로 코드를 즉시 실행할 수 있음
  • list comprehension의 정의
    : "이것은 리스트 등 순회형 컨테이너 객체로부터 이를 가공한 새로운 리스트를 생성하는 아주 간결하고 편리한 방법"
  • 제너레이터(generator)
    : iterator이고, 제너레이터 함수 내 쓰여진 yield 함수의 반환 값 1번씩을 저장한 generator object를 함수 밖으로 반환하면서 generator 함수는 잠시 멈춤
    : 그 generator object는 iterator(?)와 만나면서 실제 값으로 반환됨
    : 그리고 for loop 등을 통해 그 generator 함수가 다시 실행되면 멈췄던 게 다시 실행되고, iteration을 통해 다음 반환 값이 또 1번 yield를 통해 함수 밖으로 반환됨
# 예시 코드

def number_generator():
    yield 0
    yield 1
    yield 2
 
for i in number_generator():
    print(i)

>>>
0
1
2
  • 실행시간 측정
import time
start = time.time()  # 시작 시간 저장

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

>>> time : 0.00010514259338378906
  • pass문은 if, while 안에서도 사용 가능...
  • 함수 안의 함수 정의 가능
    : 만약에 상위 함수가 아니라 내부 함수를 사용하면 local scope로만 쓰이는 함수명이어서 'name 'inner_min_function' is not defined' 오류를 반환함
    : 혹시나 싶어 함수 안에 return을 두 개 넣었더니 제일 처음 return만 반환한다.
list_data = [30, 20, 30, 40]

def minmax_function(x_list):
        
    def inner_min_function(x):
        length = len(x)
        min_result = x[0]
        for i in range(length):
            if min_result > x[i]:
                min_result = x[i]
        return min_result
    
    def inner_max_function(x):
        length = len(x)
        max_result = x[0]
        for i in range(length):
            if max_result < x[i]:
                max_result = x[i]
        return max_result
        
    x_min = inner_min_function(x_list)
    x_max = inner_max_function(x_list)
    
    minmax_list = [x_min, x_max]

    return minmax_list

print("최솟값, 최댓값은 : ", minmax_function(list_data))
print("최솟값은 : ", minmax_function(list_data)[0])
print("최댓값은 : ", minmax_function(list_data)[1])

>>>
최솟값, 최댓값은 :  [20, 40]
최솟값은 :  20
최댓값은 :  40
  • map 함수의 정의
    : 입력받은 자료형의 각 요소가 함수에 의해 수행된 결과를 묶어서 map iterator 객체로 출력

  • 모듈의 정의
    :모듈은 함수, 변수, 클래스를 모아 놓은 파일을 말합니다. 즉, 코드의 저장소라고 볼 수 있습니다.

  • 모듈 만드는 법
    1) 실행할 함수, 변수 등을 코드로 짠다
    2) 텍스트 그 자체로(\n 등도 포함되게) '모듈이름'.py로 저장한다
    3) 실행은 import '모듈이름'
    4) '모듈이름'.메소드()로 실행

  • 프로그래밍 패러다임(programming paradigm)
    1) 객체 지향 프로그래밍(Object Oriented Programming)
    2) 함수형 프로그래밍(Functional Programming)
    장점 : 순수성으로 함수 외부에 영향을 안 줌 / 모듈화 시켜서 가독성 좋음 / 디버깅 및 테스트에 용이
    함수형 프로그래밍, 제너레이터 documentation

  • 파이썬 스타일 가이드
    : whitespace, naming conventions 등 협업 시 모두가 잘 알아볼 수 있는 깔끔한 코드를 만들기 위한 가이드가 있다.

  • 클래스에서 __init__은 클래스가 호출돼서 객체가 생성될 때마다 실행된다

풀잎스쿨

  1. 딕셔너리
    : json 파일의 형식과 비슷함
    : json 파일에서는 value로서 멀티플한 값이 있으면
  2. 세트
    : no duplicates, unordered
  3. 프로그램 -> 프로세스 -> 쓰레드 개념의 차이
    : 프로그램은 실행 가능 한 파일(디스크에 있는 것)
    : 프로세스는 프로그램이 실행됐을 때 실행되는 것(메모리에서 실행됨)
    : 쓰레드는 프로세스 내의 가장 작은 실행 유닛
    : 예) 메모장(프로그램) 실행 -> 프로세스 생성 -> 사용자의 입력 받기(쓰레드)
  4. Nested functions(함수 안의 함수) 존재 이유
    : inner function은 밖으로 부터 보호받고, 그 함수 정의 내에서만 사용되고 역할을 안 하기 때문에 더 효율적일 수 있다.

오늘 배운 것(나만의 정리)

  1. programming paradigm은 앞으로 개발자로서 코딩을 할 때 어떤 관점에서 코딩하면 되는지를 각인시킬 수 있게 해주는 개념이다.
  2. class가 생성되는 법 및 구조
    1) class를 생성한다
    2) class 내에 __init__함수를 만들고, 이 함수에서 앞으로 생성될 class 객체에 대한 속성(?)들을 각각 변수들에 대입해서 잡아준다.
    3) 이때, 그리고 class 함수 내에서는 딱 그 객체의 경우를 지정해주는 변수가 필요한데 그것은 self-parameter이다.
    4) 예)__init__(self, name, age...)로 해줄 경우self.name, self.age 등을 통해 해당 객체의 속성을 이렇게 정의해준다.
  3. 튜플 표현식스런 (i for i in iterable)은 generator object를 만든다.

더 공부할 것

  • generator 개념 및 어떤 코드 구조로 만드는지
    : 12.Dec.30 추가
    1) generator는 generator expression과 generator function으로 나뉨
    2) generator expression은 약간 튜플표현식 같은 코딩
    3) generator function은 함수 정의 시 yield가 있으면 됨
    4) 사실 generator가 생기게 된 배경 같이 설명하는 건, '뭔가 함수 콜이 끝난 후에도 다시 그 local variables 갈 순 없을까?'이다.
    5) 그래서 generator 함수가 실행되는 구조는,
    : generator 함수를 yield와 정의
    : 함수 실행 및 iterable한 generator object 반환
    : 해당 generator object는 yield에서 값 하나를 잡고 있고, 사실 그 generator 함수도 잠시 suspended 된 것이다.
    : 그리고 다른 iteration 함수가 그 generator object를 다시 부르면, 다음 yield 값을 가져온다.
    : 이렇게 끝까지 가고 yield 값은 다 사라진 채로 generator object만 남게 된다.(더이상 iteration 불가)
  • lambda 함수가 잘 쓰이는 map(), filter(), reduce() 살펴보기
  • module, package, library 각각의 차이점은 뭘까
profile
'어떻게든 자야겠어'라는 저 아이를 닮고 싶습니다

0개의 댓글

관련 채용 정보