y = f(x)#
- 특정 역할을 수행하는 코드 집합을 하나의 단위로 묶어놓은 것
- 입력값을 가지고 어떤 일을 수행한 다음에 그 결과물을 내어놓는 것
Python의 함수적 특징#
1. 사용자 정의 함수 (User define function)#
- 함수를 정의할 때 사용하는 keyword :
def
- 함수명을 정의할 때 가독성이 있는 이름으로 정의해야한다.
- 숫자로 시작하면 안되고 대문자로 시작하지 않는다.
- 대문자로 시작하게 되면 Class를 지칭할 때와 겹치기 때문에 주의해야한다.
- _를 이용해서 의미를 구분해도 좋다 다른 특수기호는 쓰지 말것
- 함수 표현 : name_search, 클래스 표현 : NameSearch
- 다른 함수와 겹치지 않고 이미 사용하는 용어를 사용하지 않게 잘 지어야 한다.
- 단일 단어로 사용하는건 권장하지 않음
- jupyter notebook 기준 녹색은 이미 있는 word, 파란색이 사용가능한 word로 ide별로 구분되서 알려주는경우가 있음
def my_sum(a, b):
print('입력받은 값은 {}, {} 입니다.'.format(a, b))
return a + b
print(my_sum(100, 100))
# --- result ---
# 입력받은 값은 100, 100 입니다.
# 200
- (객체지향 제외하고 일단 naive하게 한다면) 인자값을 받을 환경이 달라질 때마다 함수를 새로 정의해야하는 상황이 있음
- 이럴 때 다수의 인자를 전달할 수 있는 방법이 있음
- 인자 부분에
wildcard *
를 이용하여 표현해도 된다. 이때 tuple
형태로 입력데이터를 받는다.
def my_sum(*a):
print('입력받은 값은 {} 입니다.'.format(a))
result = 0
for tmp in a:
result += tmp
return result
print(my_sum(100, 100, 1, 2, 3, 4, 5, 6))
# --- result ---
# 입력받은 값은 (100, 100, 1, 2, 3, 4, 5, 6) 입니다.
# 221
2. Python의 메모리 특성#
- 특정 변수가 가지고 있는 주소값을 알고 싶을 때: id()
- 숫자는 많이 사용하기에 메모리 효율성을 위해 int 256까지(System마다 상이함)는 객체를 1개만 만들어서 공유해서 사용한다.
- Python은 1급함수를 지원하기에 함수의 address만 넘겨서 처리가 가능하다.
print(id(a))
# 140720166120960
# 정수값으로 표현된 메모리 주소, 직접 접근은 안되니 컨버팅된 주소가 나온 것
a = [1, 2, 3] # 2014906646408
print(id(a))
b = [1, 2, 3] # 2014906566664
print(id(b))
print(a == b) # True 내용이 같은가? Yes
print(a is b) # False 메모리 id까지 공유해서 같은가? No
a = 50
b = 50
print(a is b)
# True 숫자는 워낙 많이 사용하기 때문에 메모리 효율성을 위해 int 256까지(System마다 상이함)는 객체를 1개만 만들어서 공유해서 사용
a = 256
b = 256
print(a is b)
a = 257
b = 257
print(a is b)
# python은 함수의 address만 넘겨서 처리가 가능하다 즉 1급 함수를 지원한다.
def test_func(a, b):
print("안녕하세요")
result = a + b
return result
def testing(hoho):
hoho(10, 20)
testing(test_func)
3. 함수의 결과값은 언제나 하나이다.#
- 각 함수의 값은 무조건 하나
- 여러개의 return값이 나오는 것처럼 보이지만, 실제로는 다르다.
def my_return(a, b):
return a+b, a*b
result = my_return(3, 4)
- 위의 코드만 보면 오류가 날 것 같지만, 함수의 결과값은 2개가 아니라 언제나 1개이기 때문에 my_return 함수의 결과값
a+b
, a*b
는 튜플 값 하나인 (a+b, a*b)
로 돌려준다.
- 만약 반대로 여러개의 결과값처럼 받고 싶다면 다음과 같이 호출하면 된다.
>>> result1, result2 = add_and_mul(3, 4)
4. 매개변수에 초기값 미리 설정하기.#
- Python의 함수는
default parameter
를 사용할 수 있다.
- 이를 통해서 인자를 미리 설정해서 생략하여 입력받을 수 있다.
- 단, 맨
마지막 인자
에만 적용이 가능하다.
def say_myself(name, old, man=True):
print("나의 이름은 %s 입니다." % name)
print("나이는 %d살입니다." % old)
if man:
print("남자입니다.")
else:
print("여자입니다.")
say_myself("박응용", 27)
say_myself("박응용", 27, False)
5. local variable vs. global variable#
- 일반적으로는 함수안에서 함수 밖의 변수를 변경하기 위해서
return
을 이용한다.
- global variable를 이용하고 싶으면
global
로 선언하여 사용하면 된다.
tmp = 100
def my_var(x):
global tmp
tmp += x
return tmp
print(my_var(100))