Notice
Recent Posts
Recent Comments
Code IT
Python - 함수 본문
# 함수는 한 작업의 묶음이다. 실생활의 예를 든다면 함수는 장보기 쯤으로 표현할 수 있다. # 마트에서 장볼 물건들을 골라 계산대에서 캐셔에게 물건들을 전달하고, 캐셔는 물건들의 # 총 금액을 말하고 지불하기를 요구한다. 그리고 물건들의 금액을 지불하고 마트를 나선다. # 장을 보는 것은 1. 물건을 고른다. 2. 계산한다. 라는 작은 단위의 작업을 하나로 묶어 놓은 것이다. # 파이썬의 함수도 마찬가지로 작은 단위의 작업을 하나로 묶어 놓은 것을 말한다. # 파이썬의 함수는 아래와 같은 형태로 구성된다. 여기서 <>는 생략가능한 것을 말한다. # def <함수명> (<인자1, 인자 2, 인자 3...>): # <함수 구문> # <return 반환 값> # 안녕하세요 라는 문장을 출력하는 함수를 만들어보자. def say_hello(): print("안녕하세요") say_hello() # 이번에는 안녕하세요 라는 문장을 반환해 본문에서 출력하는 코드를 만들어보자. def get_hello(): return "안녕하세요" # retun 이라는 키워드는 함수를 호출한 호출자에게 값을 되돌려 준다. hello = get_hello() # get_hello()를 호출하고 반환받은 값을 hello 변수에 할당한다. print(hello) # 인자를 전달할 수도 있다. def get_hello_message(name): # ()에 들어있는 변수를 아귀먼츠(arguments)라고 부른다. print(name) return name + "님, 안녕하세요" hello = get_hello_message("코딧") # 호출부분에서 ()에 들어있는 값은 파라미터(parameter)라고 부른다. print(hello) # 만약, 아귀먼츠가 있는 함수를 호출할 때, 파라미터를 전달하지 않으면 에러가 발생한다. # hello = get_hello_message() # print(hello) # 파라미터를 전달하지 않았을 때, 아귀먼츠의 값에 기본값을 할당할 수 있는 방법도 있다. def get_hello_message(name = "Codit!"): print(name) return name + "님, 반갑습니다." hello = get_hello_message() print(hello) # 숫자 두 개를 받아 더하기 계산을 하는 함수를 만들어보자. def add_two_numbers(num1, num2): print("num1:" + str(num1), "num2:" + str(num2)) return num1 + num2 add_result = add_two_numbers(10, 30) print(add_result) # get_hello_message 처럼 기본 값을 지정할 수도 있다. # 또한, 다른 언어들이 함수나 메소드를 호출할 때 겪는 불편함도 파이썬에서는 해결할 수 있다. # 만약, 10개의 아귀먼츠가 있는 함수를 호출 할 때, 개발자는 함수의 자릿수에 맞는 값을 # 지정해 할당해 줘야 한다. 만약, 파라미터와 아귀먼츠의 값이 잘못 지정된다면, # 원인을 찾기 힘든 버그를 만나야만 한다. # 파이썬은 이런 불편함을 해소하기 위해, 키워드 인자 라는 것을 도입했다. add_result = add_two_numbers(num2 = 40, num1 = 50) print(add_result) # 사용할 일은 적지만 꼭 필요할 때가 있는 가변인자도 있다. # 프로그래밍이 낮설고 가변인자라는 말이 낮설다면, 이 부분은 패스해도 무방하다. # 아귀먼츠에 *를 붙이면, 하나의 아귀먼츠에 여러 개의 파라미터를 할당할 수 있다. # 그리고 이 아귀먼츠를 가변 아귀먼츠(가변인자) 라고 부른다. def add_many_numbers(*num): sum = 0 # 가변 아귀먼츠는 tuple 타입으로 처리되어 tuple이 할 수 있는 모든 기능들을 사용할 수 있다. print(type(num)) for number in num: sum += number return sum add_result = add_many_numbers(1,2,3,4,5,6,7,8,9,10) print(add_result) # 만약 함수에 정의되지 않은 파라미터를 전달하고자 할 때는 어떻게 할까? # 함수에 아귀먼츠를 추가하고, 파라미터를 추가하면 된다. 하지만 이 작업은 수정비용이 크다. # 이 함수가 여러 소스에 걸쳐 약 1000회 정도 호출되고 있는 함수라면, # 이 함수를 호출하고 있는 코드를 모두 수정해야 할 것이다. # 파이썬은 이런 비용까지 모두 저렴하게 해결할 수 있다. # ** 아귀먼츠는 함수에 정의되지 않은 파라미터들을 모두 dict형식으로 받아서 사용할 수 있다. def get_hello_message(name, **message): print(name) print(message) return name + "님, " + message["msg"] + message["sub"] hello = get_hello_message("Codit", msg = "안녕하세요. ", sub="반갑습니다.") print(hello) # 단, 인자가 존재하지 않는다면, 함수 정의 부분에서 에러가 발생할 수 있으므로, # ** 아귀먼츠는 사용을 주의해야 한다. # hello = get_hello_message("Codit") # print(hello) # 함수를 정의하긴 했지만, 기능에 대해 정확한 설계나 분석이 없을 경우, # pass 키워드로 함수의 껍데기만 만들어 놓을 수 있다. def make_employee(): print("이 함수는 아무런 동작을 하지 않습니다.") pass make_employee()
'Python & Django' 카테고리의 다른 글
Python - while (0) | 2019.01.31 |
---|---|
Python - 제어하기 (if, elif, else) (0) | 2019.01.30 |
Python - bool (0) | 2019.01.30 |
Python - 객체복사 (얕은 복사/깊은 복사) (0) | 2019.01.30 |
Python - list, set, tuple, dict (0) | 2019.01.30 |
Comments