함수는 특정 코드 블록을 재사용하기 위해 이름을 붙여서 네임스페이스에 저장한 오브젝트를 말한다.
DRY / Dont't Repeat yourself
함수는 코드의 간결함과 가독성, 디버깅
을 위해 사용하는 것이다.
프로그래밍을 하다 보면 똑같은 내용을 반복해서 작성하고 있는 자신을 발견할 때가 종종 있다. 이때가 바로 함수가 필요한 때이다. 즉 반복되는 부분이 있을 경우 "반복적으로 사용되는 가치 있는 부분"을 한 뭉치로 묶어서 "어떤 입력값을 주었을 때 어떤 결괏값을 돌려준다"라는 식의 함수로 작성하는 것이 현명하다.
def gretting():
print("hello!")
gretting()
""" 출력결과는 hello! """
함수의 매개변수(parameter) : 함수를 정의할 때 넣는 인자.
함수 호출시 사용되는 인수(arguments) : 함수 호출 시 괄호 안에 들어가는게 바로 인수.
매개변수(parameter)와 인수(arguments)는 혼용해서 사용되는 헷갈리는 용어이므로 잘 기억해 두자. 매개변수는 함수에 입력으로 전달된 값을 받는 변수를 의미하고 인수는 함수를 호출할 때 전달하는 입력값을 의미한다.
name = "lalalalalalala"
def greeting(name):
print(f"hello! {name}")
greeting("teddy")
"""hello! teddy 가 출력됨"""
print(name)
"""lalalalalalala 가 출력됨"""
함수 바깥의 변수와 함수 작성시 사용된 매개변수가 같은 이름을 가지고 있다 하더라도, 정의된 변수와는 각각 다른 object 이다. 서로 영향을 미치지 않는다.
python에서는 변수의 유효 범위를 네임스페이스(namespace) 기반으로 결정한다
네임 스페이스는 Local, Enclosed, Global, Built-in 이 있으며, 이를 줄여 LEGB라 한다.
이는 변수를 확인할때 먼저 확인하는 순서이기도 하다.
Local : 지역적 네임스페이스로, 클래스나 함수의 내부 범위
Enclosed : 내부 함수에서 외부 함수의 변수를 사용할 수 있는 범위
Global : 전역적 네임스페이스로, 파일 단위의 모듈 범위
Built-in : 내장 네임스페이스로, 파이썬으로 작성된 모든 코드 범위
일단 이 정도만 하고 다음번에 학습해보자.
네임스페이스 관련 링크 : 네임스페이스에 대해 더 알고 싶다면 여기를 클릭!
def add(a, b):
result = a + b
return result
>>> a = add(3, 4)
>>> print(a)
7
사용법 : 결괏값을 받을 변수 = 함수이름(입력인수1, 입력인수2, ...)
>>> def say():
... return 'Hi'
...
>>> a = say()
>>> print(a)
Hi
사용법 : 결괏값을 받을 변수 = 함수이름()
>>> def add(a, b):
... print("%d, %d의 합은 %d입니다." % (a, b, a+b))
...
>>> add(3, 4)
3, 4의 합은 7입니다.
사용법 : 함수이름(입력인수1, 입력인수2, ...)
print문은 함수의 구성 요소 중 하나인 <수행할 문장>에 해당하는 부분일 뿐이다. 결괏값은 당연히 없다. 결괏값은 오직 return 명령어로만 돌려받을 수 있다.
>>> a = add(3, 4)
>>> print(a)
None
a 값은 None이다. None이란 거짓을 나타내는 자료형이라고 언급한 적이 있다. add 함수처럼 결괏값이 없을 때 a = add(3, 4)처럼 쓰면 함수 add는 반환 값으로 a 변수에 None을 돌려준다. 이것을 가지고 결괏값이 있다고 생각하면 곤란하다.
>>> def say():
... print('Hi')
...
>>> say()
Hi
사용법 : 함수이름()