함수란 무엇인가
프로그래머가 아니더라도 함수라는 단어는 익숙할 것 같습니다. 수학을 배울 때도 함수를 쓰니까요. 위키백과에 따르면 함수의 수학적인 정의는 집합 X의 원소 x 한 개에 집합 Y의 원소 y 한 개가 대응하는 관계를 의미한다고 하네요(위키백과의 함수). 1차함수, 2차함수, 다항함수, 삼각함수 등등 수학에서 사용하는 함수는 주어진 x값들로 매핑되는 y값을 구하기 위한 논리적인 관계를 함수라고 하는 것 같아요. 조금 어렵죠?
프로그래밍에서의 함수는 조금 단순하게 생각해도 될 것 같아요. 원하는 결과값을 얻기 위한 반복적인 연산을 함수라는 형태로 사용한다고 보시면 됩니다. 시작은 수학적인 함수 의미가 강하지만, 프로그래밍에서는 특정 기능을 하는 일종의 논리적인 묶음이예요. 예를 들어서 '날씨를 알려줘'라는 요청이 있다면 매번 기상청 홈페이지에 들어가서 기상예보를 찾아서 오늘 날씨와 서울을 선택해서 맑음이라는 결과를 확인한다면 너무 귀찮겠죠? 그럴때 오늘의 날씨라는 가상의 버튼이 있다고 생각하면 됩니다. 가상의 버튼을 누르면 맑음이라는 결과가 나와요. 뭔가 더 간단해졌죠? 이 가상의 버튼을 함수라고 이해하면 더 쉽겠죠? 파이썬에서 이 버튼의 역할을 하는 기능이 함수예요.
파이썬에서의 함수
기본적인 함수의 선언과 호출
파이썬에서 함수를 사용하기 위한 기본 문법은 아래와 같이 definition의 약자인 def를 선언하면 됩니다. def를 입력하고 다음에 함수명 뒤에 괄호 안에 인자값을 입력하고 콜론 ( : ) 을 입력하고 인덴트를 한 뒤 함수 내에 들어갈 기능을 넣습니다.
# 기본 함수
def this_is_function():
print("HELLO, THIS IS FUNCTION")
# 함수의 호출
this_is_function()
# 인자값이 있는 함수
def function_with_param(param):
print('param : ' + param)
# 함수의 호출
function_with_param('lion')
function_with_param('tiger')
function_with_param('dog')
# 출력 결과
param : lion
param : tiger
param : dog
# 여러 인자값이 있는 함수
def function_with_params(color, object):
print('params : ' + color + ' ' + object)
# 함수의 호출
function_with_params('green', 'leaves')
function_with_params('red', 'trees')
function_with_params('blue', 'sky')
# 출력 결과
params : green leaves
params : red trees
params : blue sky
위에서처럼 파이썬에서의 함수는 thisIsFunction 과 같은 카멜방식이 아닌 this_is_function 과 같이 언더스코어를 이용해 의미를 구분하는 스네이크 표기법을 사용합니다. 프로그래밍 언어에서의 기본적인 표기법에 대해서는 다음에 다루도록 할게요. 물론 표기법이 다르다고 해서 문제가 되지는 않지만 파이썬 스타일가이드에서는 함수를 표기할 때 소문자와 언더스코어를 이용하도록 권장하고 있기 때문에 되도록 스타일가이드를 지키는 것이 좋습니다.
함수를 선언하고 나면 함수명과 () 괄호를 붙여서 호출하면 됩니다. 만약 함수에 인자값이 있다면 호출할때 함수명과 함께 인자값을 넣어서 호출해야 합니다. 호출하면 인자값이 들어간 결과가 출력되는 것을 볼 수 있습니다. 인자값이 여러개 인 경우에는 콤마( , )로 구분하여 순서대로 정의하고 호출하면 됩니다.
다중파라미터입력 ( Arbitrary Arguments , *args )
만약 얼마만큼의 인자값이 들어올지 모르거나, 인자값을 유동적으로 입력받고 싶다면 임의로 파라미터를 정의할 수 있습니다.
def multi_args_function(*foods):
print("My Favorite Food is " + foods[2])
multi_args_function("Rice", "Pizza", "Noodles")
# 출력결과
My Favorite Food is Noodles
위 예시의 *foods 처럼 원하는 파라미터 변수 앞에 별표( * )를 붙이면 함수 내에서 배열의 형태로 사용할 수 있고 얼마만큼의 인자를 넣든지 원하는 함수를 호출할 수 있습니다.
키워드 파라미터 ( Keyword Arguments )
호출할때 함수의 파라미터에 키워드를 지정해주면 순서에 상관없이 파라미터를 입력하여 함수를 호출할 수 있습니다.
def address_function( country, city, zip ):
print('Zip Number Is ' + zip)
address_function( country="korea", zip="001111", city="seoul" )
# 출력결과
Zip Number Is 001111
키워드를 입력하면 순서가 변경되어도 정확하게 zip 변수에 해당하는 데이터가 보여집니다.
임의의 키워드 파라미터 ( Arbitrary Keyword Arguments, **kwargs )
다중 파라미터 입력과 키워드 파라미터를 혼합하여 사용하는 것도 가능합니다. 임의의 파라미터를 지정하고 해당 인자에 키와 값으로 이루어진 딕셔너리(dictionary) 타입으로 전달하면 해당 함수 안에서 원하는 데이터를 알맞게 사용할 수 있습니다. 딕셔너리로 되어 있는 변수 앞에 **별표를 두 개를 붙이면 혼합형으로 사용할 수 있습니다.
def address_function(**address):
print("The City Name is " + address["city"])
address_function(city="seoul", coutry="korea")
address_function(city="seoul")
address_function(coutry="korea", city="seoul", phone="000-0000-0000")
# 출력결과
The City Name is seoul
The City Name is seoul
The City Name is seoul
기본 인자값 설정
함수에 파라미터를 받을때 기본값을 설정하여 빈값이 들어올 때 기본값이 입력되도록 할 수 있습니다.
def default_function( country="Korea" ):
print("Country Name Is " , country)
default_function("India")
default_function()
default_function("")
default_function("France")
default_function(None)
# 출력결과
Country Name Is India
Country Name Is Korea
Country Name Is
Country Name Is France
Country Name Is None
def default_num_function( count=0 ):
print("Number Is ", count)
default_num_function(-1000)
default_num_function()
default_num_function(4)
default_num_function("213")
default_num_function(None)
# 출력결과
Number Is -1000
Number Is 0
Number Is 4
Number Is 213
Number Is None
출력 결과에서 알 수 있듯이 기본값이 설정되어 있더라도 빈 문자열로 들어오면 기본값이 매핑되지 않고 비어있는 상태 그대로 출력됩니다. 반면 아무것도 입력되지 않은 상태로 들어가면 기본값으로 입력해 놓은 Korea 가 출력되어 보여짐을 알 수 있습니다.
만약 정수형으로 기본값을 설정한다면 어떨까요? default_num_function에서 보여지듯이, 기본값이 int 형이라 할지라도 인자값으로 스트링을 입력할 수 있습니다. 기본값에 따라서 들어오는 입력값에 제약은 없습니다. 다만 인자값이 입력되지 않을 경우에만 기본값으로 지정된 값이 세팅됩니다. 정수형이나 스트링형에서 모두 None 인 경우는 그대로 출력됩니다.
함수의 결과값 반환
함수 내에서 계산한 결과값은 return 구문을 통해서 반환할 수 있습니다.
def multiple_function(x):
return x * 20
print(multiple_function(-1))
print(multiple_function(2))
print(multiple_function(0))
print(multiple_function("11"))
# 출력결과
-20
40
0
1111111111111111111111111111111111111111
return 구문을 사용하면 호출한 곳에 결과값을 리턴합니다. 따라서 정수형으로 입력된 함수에 계산 결과를 리턴하여 출력합니다. 문자형으로 입력된 11이 그대로 20번 붙어서 긴 1로 된 문자열이 생성된 것을 알 수 있습니다.
파이썬에서 함수는 다양한 형태로 사용될 수 있습니다. 특히 인자값이나 수에 제약없이 사용할 수 있으며, 그만큼 함수 내에서 허용하는 파라미터의 값에 대한 타입 정의와 예외처리를 꼼꼼히 해야 합니다.
'프로그래밍 PROGRAMMING > 파이썬 PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬의 컨테이너(container) 객체란 (0) | 2022.03.03 |
---|---|
[PYTHON] 파이썬의 나누기와 몫과 나머지를 구하는 방법 (0) | 2022.01.05 |
[PYTHON] WHILE 반복문 기본 문법 (0) | 2021.12.17 |
[PYTHON] FOR 반복문 기본 문법 (0) | 2021.12.10 |
[PYTHON] cx_Oracle에서 sid를 인식하지 못할 때 : ORA-12514 오류 (0) | 2021.11.30 |