본문 바로가기
Tech-Pyhton

MIT OCW - Introduction to Computer Science and Programming in Python - Lecture 04

by redcrow 2019. 1. 25.

Lecture 4. DECOMPOSITION, ABSTRACTION, FUNCTIONS


이 글은 Mit Open Courseware(OCW)에서 공개한 교육자료이며 OCW의 라이센스정책을 따릅니다.


License : Common Creative License : BY-NC-SA (저작자표시-비영리-동일조건변경허락)


출처 : https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-0001-introduction-to-computer-science-and-programming-in-python-fall-2016/lecture-slides-code/MIT6_0001F16_Lec4.pdf



1. Abstraction & Decomposition



1) Abstraction : 추상화

- 빔 프로젝터로 예를 들면, 프로젝터는 블랙박스이고 어떻게 동작하는지 모른다. 단지 input에 전기를 공급하고, output으로 나오는 영상을 보면된다.

- 추상화는 프로젝터처럼 어떻게 내부가 동작하는지 알 필요가 없도록 하는것을 말한다


2) Decomposition : 분해

- 각각 다른 올림픽경기 영상을 출력하는 프로젝터를 모아서 큰 올림픽 영상을 만들 수 있다.

- 분해는 하나의 목표를 이루기 위해 기능을 분해하는것을 말한다.



프로그램에서는 기능을 분해하여 function 단위로 만들고,  function의 내부는 추상화하여 black box로 만든다.


Python에서는 function, class로 분해를 구현하고, function specificationdocstring으로 추상화를 구현한다.



2. Functions


- 재사용가능한 코드들의 모음을  fucntion이라고 한다.

- function은 프로그램에서 호출(call, invoke)되지 않으면 수행되지 않는다.

- function은 이름, 파라미터(0개 이상), docstring(optional), 함수내부 코드, return 문(optional) 로 구성된다.


def is_even(i):

    """

    Input  : i, a positive int

    Returns True if i is even, otherwise False

    """

    print ("Inside is_even")

    return i%2 == 0


is_even(3)


  • def : keyword
  • is_even : function name
  • i : parameter
  • """ ~ """  :  doctstring. help(is_even) 이나 is_even.__doc__ 으로 내용을 확인할수 있다.
  • return : 함수의 수행후 리턴값 (expression)


3. Variable Scope

함수를 호출할때 파라미터로 입력되는 변수의 값은 함수의 내부의 변수로 값만 바인딩된다.

def f( x ):
    x = x + 1
    print('in f(x): x =', x)
    return x

x = 3
z = f( x )


위의 예에서 f(x) 로 넘어가는 x는 외부의 변수이고, 함수 내부의 x는 이름은 같지만 함수 내부에서만 사용하는 다른 변수이다.


f(x)로 넘어가는 x는 global scope, x는 local scope(f scofe)라고 한다.



4. 함수의 특징


1) return


- 함수에서 return이 없을 경우 함수는 None을 return한다.


2) argument (parameter)


- 어떠한 형식이라도 사용가능하다. 함수로 parameter로 사용가능하다.


def func_a():

    print ("inside func_a")

def func_b(y):

    print ("inside func_b")           

    return y

def func_c(z):

    print ("inside func_c")           

    return z()


print( func_a())

print( 5 + func_b(2))

print(func_c(func_a))


수행결과

inside func_a

None

inside func_b

7

inside func_c

inside func_a

None


3) 함수의 입력


아래의 두 코드는 서로 다르다.


- print(func_c(func_a))   : func_c에 func_a의 함수코드 자체를 넘김

- print(func_c(func_a())) : func_c에 func_a의 return값을넘김



5.  function의 scope


def g(x):

    def h():

        x = 'abc'

    x = x + 1

    print('g: x =', x)

    h()

    return x



x = 3

z = g(x)

print(x)


x 가 프로그램 mian, function g(), function h() 각각에서 사용되고 있지만 모두 다른 scope를 갖고 있다.


  • 프로그램 main의 x는 3으로 시작해서 변경하는 코드가 없으므로 종료시까지 3
  • g()의 x는 3을 넘겨받아서 1을 증가시켰으므로 4
  • h()의 x는 abc였으나 변경이 없으므로 종료시까지 3


댓글