티스토리 뷰

반응형

안녕하십니까 Hun!입니다!


오늘은 저번시간의 재귀함수에 이어서 진행하도록 하겠습니다. 제가 오늘 소개해드리고자 하는 이야기는 함수가 값으로도 사용될 수 있다는 것입니다. 즉, 파이썬에서는 함수도 하나의 값인 객체로 본다는 것입니다. 이 말은 만약 A라는 이름으로 함수를 정의하고 A를 B라는 이름에 대입을 하면 A의 내용을 B도 수행할 수 있다는 것을 뜻합니다. 예시로 저번시간의 팩토리얼 함수를 사용하여보겠습니다.


def factorial(n):

    if n == 0:

        return 1

    else:

        return n * factorial(n - 1)


fac = factorial


위와 같이 팩토리얼을 ‘factoral’이라는 이름으로 정의하였고 ‘fac’이라는 이름에 대입하였습니다. 그런 다음에 fac(5)을 실행해보면 ‘factorial’함수와 동일하게 120 값이 나오게 되는 것을 볼 수 있습니다. 이렇게 함수는 변수처럼 함수 본문의 내용을 다른 함수로 대입할 수 있습니다. 또 함수는 값이기 때문에 다른 함수에 인수로 전달하여서 사용하는 것이 가능합니다. 어떤 함수를 받아서 미분 값을 계산하는 함수를 예시로 들어보겠습니다.


def cube(x):

    return x**3


def differential(f,x,dx):

    return (f(x+dx)-f(x))/dx



위의 ‘cube’ 함수는 인수를 받아서 인수의 세제곱을 계산하는 함수이고 아래의 ‘differential’ 함수는 인수를 하나 가지는 어떤 함수와 x값, 작은 간격의 크기로 사용하는 값인 dx를 인수로 받아서 x값에서의 기울기를 계산하는 미분함수입니다. 미분은 원래 두 개의 값 사이를 미세하게 쪼개고 또 쪼개서 기울기를 계산하는 것입니다. 그러면 ‘cube’를 미분함수에 인수로 사용하여보겠습니다. differential(cube,3,.00001)을 계산해보면 수학적으로 x의 세제곱을 미분한 3x²에 x로 3을 준 값과 27.000090000228735로 비슷하다는 것을 확인할 수 있었습니다. 마지막으로 이야기할려고 하는 것은 함수안에 다른 함수가 포함되어 다른 함수를 값으로 반환될 수도 있다는 것입니다. 그 예시로는 위에 정의한 미분함수를 응용하여보겠습니다.


def differ(f,dx):

    def d(x):

        return differential(f,x,dx)

    return d


differOfCube = differ(cube,.00001)


위의 예시는 4가지의 함수가 결합되어있는 것으로 볼 수 있습니다. 먼저 ‘differ’라는 이름으로 정의된 함수는 인수로 ‘f(함수)’와 ‘dx(작은 간격의 크기)’를 받고나서 내부에 새롭게 정의된 인수가 ‘x’값으로 하나인 ‘d’라는 이름의 함수를 반환합니다. 다시 이 반환되는 ‘d’함수를 살펴보면 제가 아까 정의한 미분함수인 ‘differential’함수를 호출하여 ‘f’와 ‘x’, ‘dx’를 인수로 입력하여 반환시킵니다. 이때 “‘differ’함수에 두 개의 인수만 입력하는데 반환되는 ‘d’함수는 인수가 세 개라서 인수가 하나가 부족해서 오류가 나지 않습니까?”라고 여쭤보실 수도 있을 겁니다. 네 맞습니다. 실행이 되지 않고 오류가 나올 것입니다. ‘differ’함수는 인수 2개를 입력하면 ‘d’함수를 반환시키는데 여기서 제가 위에서 처음 이야기한 '대입'을 사용해보도록 하겠습니다. 


differOfCube = differ(cube,.00001)


바로 위의 할당문처럼 말입니다. 위의 경우는 ‘differ’함수에 세제곱함수를 정의한 ‘cube’함수와 'dx'로 .00001을 인수로 입력하였습니다. 두 개의 인수를 받았으므로 ‘d’함수가 반환되는데 이를 ‘differOfCube’라는 이름에 대입합니다. 그러면 ‘differOfCube’에 ‘d’함수의 본문내용이 대입되어 ‘differOfCube’는 인수를 x값 하나를 가질 것이고 동일하게 미분함수인 ‘differential’을 호출할 것입니다. differOfCube(3)을 계산하면 위의 ‘differential’에 ‘cube’와 ‘3’, ‘.00001’을 입력하여 계산된 값과 비슷한 값이 나올 것입니다.


아직 공부하는 중이라 완벽하게 함수에 대해서 설명을 했는지는 잘모르겠습니다. 이상으로 포스팅을 마치도록 하겠습니다.

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함