파이썬 - 함수형 프로그래밍

함수형 프로그래밍

함수형 프로그래밍은 거의 모든 것을 순수 함수로 나누어 문제를 해결하는 기법으로, 작은 문제를 해결하기 위한 함수를 작성하여 가독성을 높이고 유지보수를 용이하게 해준다.

  • 함수는 다른 함수의 인자로 전달될 수 있다. (=인자(매개변수)로 전달이 가능)
  • 함수는 변수에 할당될 수 있다.
  • 함수는 다른 함수의 결과로서 반환될 수 있다.(=다른 함수의 반환값)

함수는 다른 함수의 인자로 전달될 수 있다.

# 에러메시지를 출력하는 함수
>>> def error_message(format_func, msg):
    print(format_func(msg))

# 단어의 첫글자만 대문자로 만드는 함수
>>> def to_upper(msg):
    return " ".join(word.capitalize() for word in msg.split())

두 함수를 만들었습니다.

>>> msg = "you have limited access"
>>> error_message(to_upper, msg)

You have Limited Acces

함수는 변수에 할당될 수 있다.

매개변수로 전달될 수 있다는 의미는 변수로써 할당이 가능하다는 뜻입니다. 콜백(callback) 함수처럼 말입니다. 함수를 키워드 인자에 할당 할 수 있습니다.

>>> def france():
    print("bonjour")
     
>>> def italy(): 
    print('ciao')

위는 print 안의 값을 출력해주는 평범한 함수입니다. hello 라는 변수에 france() 함수를 할당합니다.

>>> hello = france
>>> print(hello)

<function france at 0x7f72d4360710>

이제 hello는 함수처럼 사용이 가능합니다. hello를 출력했더니 france() 함수가 나오네요.

hello의 자료형도 function 으로 나왔고요!

>>> hello()

bonjour
>>> print(type(hello))

<class 'function'>

함수는 다른 함수의 결과로서 반환될 수 있다.

마지막 특징은 함수의 return 값으로 함수를 사용할 수 있다는 특징입니다.

>>> def func1(x):
    return x**2
    
>>> def func2():
	return func1

func1 이란 이름에 입력값의 제곱을 곱해주는 함수를 만들었고, func2에 func1이 return 되도록 하였습니다.

>>> print(func1(3))
>>> print(func2()(3))

9
9

func1, func2 둘 다 같은 값이 반환된 것을 확인할 수 있습니다. 함수가 다른 함수의 결과로서 출력된 경우입니다.

함수형 프로그래밍은 모든 것을 객체로 표현하게끔 만드는 것입니다. 함수도 객체이기 때문에 함수를 값으로 할당하고 다른 함수의 결괏값으로 반환할 수 있습니다.

함수형 프로그래밍 철학

  1. 변경 가능한 상태를 불변의 상태(Immutable)로 만들어 에러를 없애자.
    모든 것은 객체이다.
  2. 코드를 간결하게 하고 가독성을 높여 구현할 로직에 집중한다.
  3. 보다 효율적인 동시성 작업

좋은 웹페이지 즐겨찾기