[Python] Function (함수)
※ 함수 (Function)
- input(parameter 또는 argument)을 받아 output을 return
- 한 가지 기능을 하는 코드 묶음
- 똑같은 구조가 반복되는 것을 막기 위해 사용
- input — (Function) — output의 구조
source: https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98#
■ 기본 구조
- parameter (매개변수): 함수에 입력으로 전달된 값을 받는 변수
- arguments (인수): 함수를 호출할 때 전달하는 입력값
# function definition
> def function_name(<parameter1>, <paramter2>, ...):
something = ...
<statement>
<statement>
...
return something # 함수 종료
# fucntion call
> function_name(<arguments1>, <arguments2>, ...)
■ 함수의 여러 형태
□ Parameter와 Return 모두 존재
# 기본 구조
> def function_name(<parameter1>, <parameter2>, ...):
<statement>
...
return
# 예시
> def set_name(name):
name = name.upper()
return name
> set_name("Kim")
KIM
□ Parameter는 없고 Return이 존재
# 기본 구조
> def function_name():
<statement>
...
return something
# 예시
> def say():
return 'Hello World'
> say() # 'Hello World'
□ Parameter는 존재 Return이 없음
# 기본 구조
> def function_name(<parameter1>, <parameter2>, ...):
<statement>
...
# 예시
> def def add(a, b):
print(f'a와 b의 합은 {a+b} 이다')
> add(100, 200) # 300
# 위 함수의 return값이 없는 이유
> a = add(100, 200)
> print(a) # None이 출력됨
□ Parameter와 Return 모두 없음
# 기본 구조
> def function_name():
<statement>
...
# 예시
> def say():
print('Hello World')
> say() # Hello World
■ 함수의 parameter 개수를 모를 때
□ 함수의 parameter 개수가 정해지지 않았을 때
- parameter앞에 *(asterisk)를 붙여줌 (argument)
- 여러 개의 parameter를 받아서
tuple로 변환
해 줌
# 기본 구조
> def function_name(*args):
<statement>
…
# e.g.1
> def add(*args):
print(type(args)) # tuple!
total = 0
for arg in args:
total += arg
return total
# function call
> add(1, 2, 3) # 6
> add(1, 2, 3, 4, 5) # 15
> add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) # 55
# e.g.2
> def func(choice, *args):
total = 0
if choice == 'plus':
for arg in args:
total += arg
elif choice == 'minus':
for arg in args:
total -= arg
return total
# function call
> func('plus', 1,2,3,4,5) # 15
> func('minus', 1,2,3,4,5) # -15
□ 함수의 parameter 개수가 너무 많아 일부만 넣고 싶을 때
- keyword arguments (키워드 매개변수)
- parameter앞에 **(asterisk)를 붙여줌
- 여러 개의 parameter를 받아서
dictionary로 변환
해 줌 - default 값을 지정해 놓으면 함수호출 시 parameter를 지정하지 않아도 default값이 사용됨
# 기본 구조
> def function_name(**kwargs):
<statement>
…
# e.g.1
> def func(**kwargs):
print(kwargs)
> func(name = 'Jay', age = 30) # {'name': 'Jay', 'age': 30}
# dictionary로 변환되는 것을 확인할 수 있음
# e.g.2
> def func(**kwargs):
name = kwargs.get('name', '[name의 Default 값]')
age = kwargs.get('age', '[age의 Default 값]')
print(f'안녕, {name}님은 {age}살입니다.')
# function call
> func(name = 'Jay', age = 30) # 안녕, Jay님은 30살입니다.
> func(name = 'Alice') # 안녕, Alice님은 [age의 Default 값]살입니다.
> func(age = 100) # 안녕, [name의 Default 값]님은 100살입니다.
◎ keyword parameter
- 함수 정의 시 default parameter를 지정해 놓는 것
# 예시
def __init__(self, penalty='12', *, dual=False, tol=1e-4, max_iter=100, ...):
<statement>
...
■ 함수 안에서 정의한 변수의 효력 범위와 수명
- Global variable : 코드 블럭 외부 변수
- Local variable : 코드 블럭 내부 변수
- 함수 밖의 변수(global variable)와 함수 안의 변수(local variable)는 이름이 갖더라도 서로 다른 변수이다.
- 함수 안에서 global을 붙여주면 사용 가능하지만 권장하지 않음
# 예시
> a = 1 # global variable (전역 변수)
> def test(a):
a = a + 1 # local variable (지역 변수)
return a
> test(a) # 2
> print(a) # 1
□ global 명령어 사용하기
# 예시
> a = 1 # global variable
> def test():
global a # global variable 호출
a = a + 1
> test() # function call
> print(a) # 2
# global variable이 변경되었다.
■ Lambda 함수
- inline 함수
- lambda 함수와 반복문을 이용하면 함수의 정의없이 다양하게 활용가능함
# 기본 구조
> funcion name = lambda <parameter1>, <parameter2>, … : <statement>
# 예시
# 일반적인 함수 사용 시
> def add(a,b):
return a+b
> add(3, 4) # 7
# lambda 함수 사용 시
> add = lambda a, b : a + b
> add(3, 4) # 7
# 활용 예시
> strings = ['yoon', 'kim', 'jessica', 'jeong']
# 사전순서 정렬 (alphabetical order)
> strings.sort()
> strings # ['jeong', 'jessica', 'kim', 'yoon']
# 글자수에 따라 길이를 정렬하고 싶으면?
> strings.sort(key = lambda s : len(s))
> strings # ['kim', 'yoon', 'jeong', 'jessica']
댓글남기기