«   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
Archives
Today
Total
관리 메뉴

Code IT

Python - 함수 본문

Python & Django

Python - 함수

Codit 2019. 1. 30. 23:00
# 함수는 한 작업의 묶음이다. 실생활의 예를 든다면 함수는 장보기 쯤으로 표현할 수 있다.
# 마트에서 장볼 물건들을 골라 계산대에서 캐셔에게 물건들을 전달하고, 캐셔는 물건들의 
# 총 금액을 말하고 지불하기를 요구한다. 그리고 물건들의 금액을 지불하고 마트를 나선다.
# 장을 보는 것은 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