본문 바로가기
비트캠프(AI아카데미)/TIL&WIL

[비트캠프 - 클라우드 기반 AlaaS 개발자 과정] 22.11.11.(DAY-20) TIL

by 그냥_살자 2022. 11. 12.

1. 이론

1) 코드 내 이론

전역번수(멤버변수)와 지역변수, global키워드

x = 1
def A():
    x = 10
    def B():
        x = 20
        def C():
            global x
            x += 30
            print(x)
        C()
    B()

if __name__ == '__main__':
    A()

# 출력값: 31
## global키워드 = 전역변수 가져오기

지역변수, 지역함수 내 지역변수, nonlocal키워드

def A():
    x = 10
    y = 100
    def B():
        x = 20
        def C():
            nonlocal x
            nonlocal y
            x += 30
            y += 300
            print(x)
            print(y)
        C()
    B()

if __name__ == '__main__':
    A()

# 출력값: 50, 400
## nonlocal키워드 = 바깥함수에서 전역변수 가져오기. 없으면 그 다음 바깥함수에서 가져옴.

클로저, 람다클로저

def calc():
    a = 3
    b = 5
    total = 0
    def mul_add(x):
        nonlocal total
        total = total + (a * x + b)
        print(total)
    def mul_add2(x):
        nonlocal total
        total = total + (a * x - b)
        return print(total)
    return {'mul_add': mul_add, 'mul_add2': mul_add2}
    # 클로저 = 함수 안에 함수 호출하기

def clac_lambda():
    a = 3
    b = 5
    return lambda x: a * x + b
    # 람다로 클로저

if __name__ == '__main__':
calc()['mul_add'](1) # 출력값: 8
calc()['mul_add2'](1) # 출력값: -2
calc_lambda()(1) # 출력값: 8

## 클로저 = 함수 안에 함수를 만들어 안쪽 함수를 리턴

 

2) 그 외 이론 및 용어

객체 = 데이터가 구조화 할 때

객체 = 속성(자료구조) + 기능(알고리즘 = 함수)의 집합

**

변수 = property, attribute, column 등등

객체의 속성 = 변수

모듈의 속성 = 객체

라이브러리의 속성 = 모듈

속성 = data(대수) - H20, 객체 - 물, 모듈(패키지) - 조각, 라이브러리 - 상품

**

dfdf.xxx ⇒ 속성 꺼낼 때

dfdf.xxx() ⇒ 기능 꺼낼 때

D() ⇒ 클래스 생성자 실행

d() ⇒ 함수 실행..?

a.d() ⇒ 메서드 실행

a = b(””) ⇒ function

a = b() ⇒ getter

b(””) ⇒ setter

**

lambda 식 = 익명 함수

**

 

3) TMI

전처리 과정

분류 1

  1. mining(크롤링 - bs4사용)
  2. processing(데이터분석 - np/pd 사용)
  3. learning (머신러닝 - tensor)
  4. post(pro와 동일과정??)

⇒ 무한루프 or 릴리스(배포 - 아마존)

분류2 → 여기로 취업 목표

  1. processing
  2. learning

OOP와 FP의 전역변수 지역변수 인스턴스변수 구분하기

사이킷런 = 머신러닝 라이브러리

https://wiserloner.tistory.com/912

머신러닝 = 기계학습 ⇒ 컴퓨터가 코딩하게 학습

 

2. 코드

<mypandas 패키지>

fp_closure

@dataclass
class OOP:
    x = 30

    def foo(self):
        x = self.x
        print("OOP 출력: " + str(x))

x = 110

def foo():
    global x
    x = x + 20
    print("FP 출력: " + str(x))

def A():
    x = 10
    y = 100
    def B():
        x = 20
        def C():
            global x
            nonlocal y
            x = x + 30
            y = y + 300
            print(x)
            print(y)
        C()
    B()

def calc():
    a = 3
    b = 5
    total = 0
    def mul_add(x):
        nonlocal total
        total = total + (a * x + b)
        print(total)
    def mul_add2(x):
        nonlocal total
        total = total + (a * x - b)
        return print(total)
    return {'mul_add': mul_add, 'mul_add2': mul_add2}
    # 클로저 = 함수 안에 함수 호출하기

def clac_lambda():
    a = 3
    b = 5
    return lambda x: a * x + b
    # 람다로 클로저

if __name__ == '__main__':
    f = OOP()
    f.foo()
    foo()
    print("전역출력: " + str(x))

    A()

    calc()['mul_add'](1)
    calc()['mul_add2'](1)

    c = clac_lambda()
    print(clac_lambda()(1), clac_lambda()(2))

fruits

import pandas as pd
import numpy as np

MENUS = ["종료", "과일2D", "숫자2D"]
def new_fruites_df():
    ls_schema = ['제품', '가격', '판매량'] # 스키마
    l1 = ["사과", "딸기", "수박"]
    l2 = [1800, 1500, 3000]
    l3 = [24, 38, 13]
    ls_apd = [l1, l2, l3]
    dc = {j : ls_apd[i] for i,j in enumerate(ls_schema)}
    df = pd.DataFrame(dc)
    return df

def my_list(a, b):
    return list(range(a, b))

def new_number_2d(): # 딕셔너리 없이 데이터프레임 만들기
    return pd.DataFrame(np.array([my_list(1,10), my_list(11, 20), my_list(21, 30)]), columns=list(map(chr, range(97, 107))))
                                                                                                # 아스키코드 사용

if __name__ == '__main__':
    while True:
        [print(f"{i}:{j}") for i, j in enumerate(MENUS)]
        menu = input("메뉴 선택: ")

        if menu == "0":
            print(MENUS[0])
            quit()
        elif menu == "1":
            print(MENUS[1])
            print(new_fruites_df())
        elif menu == "2":
            print(MENUS[2])
            print(new_number_2d())

 

3. 마무리

수업 다 끝나고 실수로 집에서 한걸 pull해버려서 하루치 공부 코드가 전부 날아감 ^^

 

결국 다른 분 깃허브 보면서 기억을 거슬러 올라가 코드를 다시 작성하는 노동을 하였다.

 

오늘 팀프로젝트의 윤곽을 좀 잡았다.

 

00매칭시스템.. 아이디어 너무 좋아..

댓글