툴곰코드 노트파이썬 › 파이썬 함수 def

파이썬 함수 def

같은 코드를 두 번 이상 쓰고 있다면 함수로 묶을 때입니다. 한 곳만 고치면 부르는 곳 전부가 함께 고쳐집니다.

⬇ 예제 파일 받기 (.py)
파이썬 · 회원가입 없음
내려받아 python 파일이름.py 로 실행합니다.
광고 영역

무엇을 하는 것인가

코드가 길어지면 같은 계산이 여기저기 되풀이됩니다. 그러다 계산식이 틀린 걸 발견하면 붙여넣은 곳을 전부 찾아 고쳐야 하고, 하나를 빠뜨리면 그게 버그가 됩니다.

함수는 그 덩어리에 이름을 붙여 두고 필요할 때 부르는 것입니다. def 이름(재료):로 만들고, 이름(값)으로 부릅니다. 고칠 일이 생기면 함수 안 한 곳만 고치면 됩니다.

괄호 안에 적는 것을 매개변수라고 합니다. 함수가 일하는 데 필요한 재료입니다. 일을 마치고 결과를 돌려주려면 return을 씁니다. return이 없으면 None이 돌아옵니다.

printreturn은 다릅니다. print는 화면에 보여줄 뿐이고, return은 값을 넘겨줘서 다른 계산에 쓸 수 있게 합니다. 초보자가 가장 자주 헷갈리는 지점이고, "함수가 값을 안 돌려준다"는 문제의 대부분이 이것입니다.

예제 코드

아래 코드가 위 버튼으로 받는 파일과 같은 내용입니다. 통째로 복사해 실행해 보고, 값을 바꿔 가며 결과가 어떻게 달라지는지 보는 편이 읽기만 하는 것보다 훨씬 빨리 익습니다.

# 함수 def — 코드 덩어리에 이름 붙여 두고 불러 쓰기

def 인사(이름):
    print("안녕하세요,", 이름, "님")

인사("김서연")
인사("이준호")

# return 은 값을 돌려주고, print 는 보여주기만 합니다. 이게 제일 헷갈립니다.
def 더하기_보여주기(a, b):
    print(a + b)           # 화면에 보여줄 뿐

def 더하기(a, b):
    return a + b           # 값을 넘겨줍니다

결과1 = 더하기_보여주기(3, 4)   # 화면엔 7 이 뜨지만
print("돌려받은 값:", 결과1)     # None  ← return 이 없어서
결과2 = 더하기(3, 4)
print("돌려받은 값:", 결과2)     # 7     ← 다른 계산에 쓸 수 있습니다
print("두 배:", 더하기(3, 4) * 2)

# 기본값을 주면 부를 때 생략할 수 있습니다
def 할인가(정가, 할인율=0.1):
    return int(정가 * (1 - 할인율))

print(할인가(20000))         # 18000  (기본 10%)
print(할인가(20000, 0.3))    # 14000

# return 을 만나면 함수는 그 자리에서 끝납니다
def 학점(점수):
    if 점수 >= 90:
        return "A"           # 여기서 끝. 아래는 안 봅니다.
    if 점수 >= 80:
        return "B"
    return "F"

print(학점(95), 학점(85), 학점(20))

# 값을 두 개 이상 돌려주기
def 통계(목록):
    return sum(목록), sum(목록) / len(목록)

합, 평균 = 통계([90, 80, 70])
print("합:", 합, "/ 평균:", 평균)

# 함수 안에서 만든 변수는 밖에서 안 보입니다
def 시험():
    안쪽값 = 123
    return 안쪽값

print(시험())
# print(안쪽값)   ← 이 줄의 주석을 풀면 NameError 가 납니다

기억할 것

광고 영역

자주 묻는 것

함수를 불렀는데 None 이 나옵니다

함수 안에서 print만 하고 return을 안 했을 때 그렇습니다. print는 화면에 보여줄 뿐 값을 넘기지 않습니다. 결과를 다른 곳에 쓰려면 return으로 돌려주세요.

함수 안에서 바꾼 변수가 밖에서는 그대로입니다

함수 안에서 만든 변수는 그 함수 안에서만 삽니다(지역 변수). 밖의 값을 바꾸고 싶으면 return으로 돌려받아 다시 넣는 것이 정석입니다. global도 있지만 코드가 꼬이기 쉬워 권하지 않습니다.

매개변수와 인자는 뭐가 다른가요

만들 때 괄호에 적는 이름이 매개변수, 부를 때 실제로 넣는 값이 인자입니다. def 더하기(a, b)a, b가 매개변수고 더하기(3, 4)3, 4가 인자입니다.

값을 두 개 돌려줄 수 있나요

됩니다. return 합계, 평균처럼 쉼표로 나열하면 튜플로 묶여 나오고, a, b = 함수()로 한 번에 받을 수 있습니다.

이어서 볼 글