함수 def

송한솔·2023년 5월 25일
0

파이썬

목록 보기
8/16

함수?

define : 정의하다

함수란 프로그래밍에서 하나의 목적을 행하기 위해 설계된 코드의 집합이라고 볼 수 있습니다.

함수의 선언방법

선언 방법

  • def 함수명(매개변수1, 매개변수2):

필요한 함수가 없을때(append와 같은 함수들) 직접 함수를 만들거나,
특정 로직을 위해 기능들을 구현해서 함수로 묶을 수 있습니다.

# 함수 생성
def pick(item, ea):
    """무엇을 주었는지 알려주는 함수."""
    print("나는 {}을(를) '{}'개 주웠다.".format(item, ea))

# 함수 실행
print(pick("연필", 2))
# 나는 연필을(를) '2'개 주었다. // 함수 안에 print가 있기때문
# None // return값이 없으므로

값 반환

return - 반환할 값

return의 특징

  • 함수 실행한 위치에 값을 전달
  • 실행 중인 함수를 즉시 종료(return값이 나온 순간 함수가 종료됩니다.)
  • return을 작성하지 않거나, 반환할 값이 없다면 none을 반환합니다.
# 함수 생성
def pick(item, ea):
    """무엇을 주웠는지 알려주는 함수."""
    print("나는 {}을(를) '{}'개 주웠다.".format(item, ea))

# 함수 실행
print(pick("연필", 2))
# 결과
# 나는 연필을(를) '2'개 주었다. // 함수 안에 print가 있기때문
# None // return값이 없으므로

# ===============================
def greet(username):
    """아침 인사를 합니다."""
    print("안녕하세요! {} 좋은 아침입니다.".format(username))
greet("한솔")
# 안녕하세요! 한솔 좋은 아침입니다.

# 위의 pick과 greet의 차이가 무슨차이냐면
# print(함수)로 실행한 것과 그냥 함수를 실행한 것의 차이입니다.
# print()에서 함수를 실행했으므로 함수에 따른 리턴값을 print해야되는데
# 값이 없으므로 none을 반환해서 출력한 경우고

# 아래는 그냥 greet("한솔")을 통해 함수자체를 실행해서 print가 실행됬지만
# 함수의 return값이 출력되야할 이유가 없기 때문에 구현된 함수의 기능만 나왔습니다.

# ===============================
def clean():
    print("청소를 시작합니다.")

clean()

# 고정된 기능을 사용할땐 매개변수가 없어도 됩니다.

또 다른 예시

def func1():
    return 1
    return 2
    return 3
print(func1())
# 1
# return이 시작된 순간 그 함수는 종료됩니다.
# 따라서 return 2,3은 의미없는 코드가 됩니다.

def func2():
    for i in range(1, 10):
        if i % 3 == 0:
            # 3의 배수일때 중지 시키고싶다.
            return # 해당함수에서 break로 반복문을 종료시키는 것과
                   # return시켜서 none을 반환하면서 함수를 종료시키는 것은 기능상 같습니다.
    print(i)

할당과 값 반환

# 리턴값 예시
def func1():
    pass

def func2():
    print("hello world")

def func3():
    return "hello world"

f1 = func1()
f2 = func2()
f3 = func3()

print(f1, f2, f3)

# 실행 결과
# hello world => f2 = func2()의 결과
# None None hello world => print(f1, f2, f3)의 결과

여기서 f2 = func2()의 결과로 print("hello world")가 출력되는 이유는
f2 = func2()라고 선언하는 것이 아니라
func2()의 결과(return)를 f2에 할당하는 것이기 때문입니다.
따라서, f2에 값을 할당하기위해 func2()함수를 한번 실행하고,
그때 print("hello world")가 실행되어 출력됩니다.


매개변수와 인자

인자(arguments)

  • 함수를 실행할 때 입력하는 데이터

매개변수(parameters)

  • 함수를 정의할 때 작성
  • 함수 실행 시 들어온 데이터에 이름을 붙이기 위한 방법

함수를 정의할 때 매개변수라고 부르고, 그 함수를 사용할때 매개변수의 위치에 들어온 값을 인자라고 부른다고 이해하면 됩니다.
즉, 매개변수 = 인자라고 이해하면 쉽습니다.


매개변수의 기본값 지정

def 함수명(매개변수1 = 기본값1, 매개변수2 = 기본값2):
함수 실행 시 인자를 생략할 수 있으며 생략된 값은 기본값으로 설정됩니다
기본값이 존재하는 매개변수는 뒤에 배치해야 합니다.
예시1

def 함수명(매개변수1 = 기본값1, 매개변수2) # X
def 함수명(매개변수1, 매개변수2 = 기본값2) # O

예시2

# 함수 생성
def pick(item, ea = 1):
    """무엇을 주웠는지 알려준다."""
    print("나는 {}을(를) '{}'개 주웠다.".format(item, ea))

print(1, 2, 3, 4, 5, sep='/')
pick("거미줄", 2) # 나는 거미줄을(를) '2'개 주웠다.
pick("나무판자") # 나는 나무판자을(를) '1'개 주웠다.

# 인자 강제 지정
pick(ea = 2, item = "다이아몬드") # 나는 다이아몬드을(를) '2'개 주웠다.

영역(scope)

함수 실행 시 필요한 변수 영역(메모리 영역)이 따로 생성됩니다.
이 메모리 공간은 함수가 종료될 때 사라지며 따라서 남겨야하는 값이 있다면 return을 이용해야 합니다.
기본 파이썬의 메모리 공간을 global이라고 하고, 함수 실행시 생기는 메모리 공간을 local이라고 합니다.
이때, local영역과 global영역의 변수명은 따로 관리됩니다.


def count_negative(n_list):
    """음수가 몇개인지 카운트하는 함수"""
    count = 0
    for n in n_list:
        if n < 0:
            count += 1
    return count

# main
n_list = [-3, -2, -1, 0, 1 , 2, 3, 4] #range(-3, 5)
count = count_negative(n_list)
print("{}의 음수 개수는 {}개다.".format(n_list, count))

# count_negative의 로컬 메모리내에서 사용된 count변수는 함수가 종료되면서 사라집니다.

0개의 댓글