매개 변수가 있는 함수

소개

반복되는 코드를 제거하기 위해 코드를 함수에 넣은 상태로 함수를 추가하는 것처럼, 코드를 정리 하겠어요. 하면 좋은 일인데 정의한 함수는 그리 썩 유연하진 않아요. 변수는 함수 안에 정의했기 때문에 각각 다른 값의 각이나 거리를 사용하려고 하면 새 함수를 작성해야 하거든요. 육각형 함수는 한가지 크기의 육각형만 그려요!

이게 왜 매개 변수를 함수에 주어야 하느냐에 대한 이유인데, 매개 변수는 *인자*라고도 해요. 이 방법을 통해 함수 안의 *변수*에 함수를 호출할 때 매번 다른 값을 줄 수 있어요:

앞의 장에서 line_without_moving() 함수를 어떻게 정의했는지 기억해보세요:

def line_without_moving():
    turtle.forward(50)
    turtle.backward(50)

여기에 매개 변수를 주어 구현할 수도 있어요:

def line_without_moving(length):
    turtle.forward(length)
    turtle.backward(length)

매개 변수는 함수 내부에 정의한 걸로 알려진 변수 처럼 동작해요. 새로 정의한 함수는 매개 변수에 넣으려는 값으로 호출하는 방법을 통해 다음 처럼 사용해요:

line_without_moving(50)
line_without_moving(40)

따라하기 안내서 앞부분의 turtle.forward(), turtle.left(), 등을 사용할 때부터 우리는 이미 매개 변수와 함수를 같이 활용해보았어요.

그리고 우리가 원하는 대로 수많은 인자(또는 매개 변수)를 놓을 수 있는데요, 이 값을 쉼표로 구분할 수 있고 다른 이름을 줄 수 있어요:

def tilted_line_without_moving(length, angle):
    turtle.left(angle)
    turtle.forward(length)
    turtle.backward(length)

다양한 크기의 육각형을 그리는 매개 변수를 부여한 함수

연습

함수를 호출할 때마다 원하는 크기로 육각형을 그릴 수 있는 함수를 작성해보세요.

해결책

def hexagon(size):
    for _ in range(6):
        turtle.forward(size)
        turtle.left(60)

몇가지 매개 변수가 들어간 함수

연습

어떤 변의 길이를 가진 어떤 변(2보단 커야겠죠?)의 갯수만큼 도형을 그리는 함수를 작성해보아요. 각기 다른 도형을 그려보세요.

이 함수를 통해 도형을 그리는 예제를 보여드릴께요:

_images/shapes.png

참고

어떤 도형이든 외각의 합은 360도가 돼요!

해결책

def draw_shape(sides, length):
    for _ in range(sides):
        turtle.forward(length)
        turtle.right(360 / sides)

미친 소릴지도 모르겠는데 *함수*를 다른 함수에 매개 변수로 완벽하게 전달할 수 있어요! 파이썬에서는 함수를 변수, 숫자, 문자열 같은 완벽한 보통의 ‘실체’로 취급해요.

예를 들자면, 한 방향으로 돌거나 여러분이 전달한 turtle.left 또는 turtle.right 거북이 함수에 따라 돈 방향에 따라 도형 그리기 함수를 만들 수 있죠.

이걸 구현할 수 있는지 보세요!

주석

함수(예: turtle.left) 전달은 ``turtle.left(45)``와 같은 식으로 작성하여 호출 하는 거와는 달라요.