안녕하세요. BlockDMask 입니다. <목차> 1. 파이썬 함수란 무엇인가. 입력값에 따라 결과가 다를수는 있지만 로직 자체는 같은 경우에 하나의 포장지 안에 넣어서 계속 재사용할 수 있게 만들어 놓은것을 함수라 합니다. 그렇기 때문에 하나의 로직을 비효율적으로(?) 복붙하여 계속 쓰지 않고, 함수로 묶어서 관리하게 되면 좀더 편리하게 사용할 수 있습니다. 그렇기 때문에 함수를 사용하는 것 입니다. 자동차도 그래요. 자동차를 만든다고할때 공장에서 바퀴 담당하는 부분이 있는데 그 바퀴를 일일히 하나하나 앞바퀴 왼쪽 오른쪽, 뒷바퀴 왼쪽 오른쪽을 하나씩 각자 만든다고 할때 얼마나 비효율적일까요? 이걸 공장에서 자동화해서 하나의 기계에서 똑같은 바퀴를 4개 뽑아내잖아요. 그게 함수와 동일한것 입니다. 자동화한 기계. 즉 똑같은 결과물을 내는 기계가 함수라 할수 있고, 바퀴는 그 반환값이라 할 수 있습니다. 만약에 그 기계에서 바퀴의 크기 (몇인치)를 입력해서 하나의 기계에서 다른 사이즈의 바퀴도 만들 수 있다면 그건 매개변수가 있는 함수라고도 할 수 있습니다. 파이썬에서 함수를 알려주기 위해서는 def 라는 키워드를 사용합니다. def를 사용하면 파이썬이 "아 이제 함수를 정의하겠구나"하고 인식하게 됩니다. 2. 파이썬에서 다양한 함수의 모양에 대해서 입력도 없고 반환값도 없는 함수 def 함수명() : 이런식으로 def뒤에 함수명이 오고, 소괄호 ()를 붙인 다음 콜론(:)을 붙여줍니다.
이런식으로 func1이라는 함수를 정의 하였습니다. 함수를 정의만 한다고 사용되지 않습니다.
이런식으로 작성을 하면 함수가 호출되면서 함수 내부의 로직이 작동하게 됩니다.
입력만 있는 함수 입력이라는게 아까 예시를 들은 바퀴의 몇인치? 인거라 생각하면됩니다. 매개변수와 인수가 무엇인가를 설명하기 전에 입력이 있는 함수의 모양을 먼저 보겠습니다. def 함수이름(매개변수1, 매개변수2, ... ): 이런식으로 괄호 안에 매개변수라는게 생겼습니다. 이게 우리가 함수를 호출할때 특정 값을 넣어주기 위해서 통로를 뚫은거라고 생각하면
좋겠습니다. 짠, 이렇게 함수의 이름옆에 매개변수를 두개 정의하였습니다. 매개변수가 2개인 함수를 정의했고 매개변수는 1개부터 시작해서 N개 까지 정의해서 본인 입맛에 맞게 함수를 정의하면 됩니다. 반환값만 있는 함수 이번에는 값을 뱉는 함수 즉 반환 값이 있는 함수에 대해서 알아보려합니다. def 함수이름(): 이처럼 return 을 작성하고 그 뒤에 함수 밖으로 보낼 반환값을 적습니다. 바로 예제로 이해해볼까요?
이렇게 return 뒤에 반환하고자 하는 값을 넣으면 함수 밖에서 값을 받아서 사용할 수 있습니다. 입력, 반환값이 둘다 있는 함수 위에서 매개변수, 반환값 둘다 배웠죠? 그 두개가 함께 있는 경우입니다. 제일 흔하게 볼 수 있는 함수의 모양입니다. def 함수이름(매개변수1, 매개변수2 ...): 바로 예제로 들어가 보겠습니다.
매개변수를 2개를 받아서 그 매개변수를 곱한 값을 반환해주는 함수 func4를 만들었습니다. 3. 파이썬 함수 예제 구구단. 함수를 사용하지 않았을 때
구구단. 함수를 사용할때
이처럼 매개변수(인자)만 변경하면 똑같이 행동하는 로직을 함수로 묶어버리면 코드가 훨씬 깔끔해 질 수 있고, 우리는 같은 코드를 작성하지 않아도 됩니다. 4. 파이썬 함수 응용 (디폴트 매개변수, 매개변수 N개, 튜플 반환) 디폴트 매개변수 우리가 함수에서 매개변수를 정의할때 그 매개변수의 디폴트값 즉 기본값을 지정해 줄수 있습니다. 그러면 우리는 그 매개변수를 사용하지 않을때. 그 디폴트 값이 해당 변수에 들어가서 함수 내부에서 사용이 됩니다. def 함수이름 (매개변수1, 매개변수2 = A, 매개변수3 = B): 당연한 이야기지만 return 반환값은 없어도 무방합니다. 매개변수의 개수도 상관없는거 이제는 이해하시겠죠? 주의할점은 제가 일부로 저 함수의 모양을 매개변수2, 3에만 디폴트 매개변수를 선언했는데요. 그 이유는 디폴트 매개변수는 뒤에서부터 선언해야 가능하기 때문입니다. 그게 무슨말인가
하면 이게 왜 불가능한지는 함수 예제를 통해서 보여드리겠습니다.
예제 1이랑 2를 보면 디폴트 파라미터가 있으면 인수를 생략해도 함수가 잘 작동하는것을 볼 수 있습니다. 하지만 예제 3번을 보면 디폴트 파라미터를 뒤에서부터 설정하지 않고 뒤에 비어있고, 앞에 존재한다면. 이는 오류 입니다. 우리가 함수를 호출할때는 ( ) 괄호안에 인자를 순서대로 넣게 되는데, 디폴트 파라미터로 선언했다 해서 비어서 넣는다는것은 불가능합니다. 그렇기 때문에 디폴트 파라미터는 뒤에서부터 선언해야합니다. 매개변수 N개 매개변수라는게 함수를 정의할때 ( ) 괄호 안에 들어갈 변수들인데, 두개면 두개 세개면 세개 이렇게 매개변수의 개수를 딱 알면 좋은데, 이 입력하는 매개변수가 몇개가 될지 모르는 경우에는 어떻게 해야할지 감이 오시나요? 파이썬에서는 이런 경우를 대비해서 몇개가 오든 상관없으니 매개변수로 넘길 수 있는 방법을 만들어놓았습니다. 이런걸 다른언어에서는 인자의 개수가 변한다 하여, 가변인자라고도 하는데. 파이썬에서는 따로 명칭이 없는거같으니 여러개의 입력값 즉 N개의 입력값을 받는 함수라 하겠습니다. 모양은 아래와 같습니다. def 함수이름 (*매개변수): 당연하게도 본인이 만들 함수 의도에 따라서 "return 반환값"이 없어도 상관없습니다.
이렇게 매개변수에 *args를 선언하면 함수를 호출할때 인자의 개수가 0개여도, 2개여도 4개여도 N개여도
상관없이 함수에서 다 받을 수 있습니다. 이상으로 오늘은 파이썬 함수 def에 대해서 포스팅 완료하였습니다. 감사합니다. |