Python(파이썬)_점프 투 파이썬/파이썬의 입출력

파이썬 함수

study note 2025. 8. 24. 03:39
반응형

❰파이썬의 함수❱

-파이썬의 함수에 대해 배워봅시다.

 

▶파이썬의 함수란?

파이썬의 함수(funtion)는 반복적이거나 특정 작업을 수행하는 코드 블록을 이름으로 묶은 것 입니다.

동일한 코드를 여러 번 작성하지 않고 재사용 가능하고, 코드의 가독성과 유지보수성을 높여주며,

입력값(매개변수)을 받아 처리하고, 결과 값을 반환 할 수도 있습니다.

함수에 대해 조금 쉽게 설명하면 계산기에 더하기와 뺄셈이라는 기능이 있으면

덧셈을 수행하기 코드, 뺄셈을 수행하기 위한 코드가 함수라고 생각하시면 됩니다.

계산기와 비유하였지만 주의 해야할 부분이 있습니다.

계산기는 고정된 기능만 수행하지만, 파이썬 함수는 프로그래머가 원하는 대로 새로 정의 가능합니다.

즉, 계산기는 ‘이미 만들어진 함수 집합’이고, 파이썬 함수는 ‘내가 직접 새로운 함수를 설계할 수 있다’는 차이가 있습니다.

 

▶파이썬 함수의 사용 이유

 주로 3가지의 주된 이유를 가집니다.

코드의 재사용성 : 같은 작업을 여러 번 반복해야 할 때, 코드를 복사하고 붙여넣는 대신 함수로 만들어 놓으면 필요할 때마다 호출해서 사용할 수 있습니다.

코드의 구조화 : 복잡한 프로그램을 여러 개의 작은 함수로 나누면, 각 함수가 특정 기능만 담당하게 되어 코드를 더 쉽게 이해하고 관리 할 수 있습니다. 레고 블록을 작은 부품 단위로 나누어 조립하는 것과 같습니다.

유지보수의 용이성 : 특정 기능에 문제가 생겼을 때,  해당 함수만 수정하면 되기 때문에 전체 코드를 뜯어 고칠 필요가 없습니다.

 

▶함수의 기본구조와 순서

파이썬에서 함수를 정의 할 때 ' def ' 라는 키워드를 사용합니다.

def 함수이름(매개변수) :
	실행할 코드(코드 블록)
    return 반환값

 

def는 함수를 정의할 때 사용하는 키워드입니다.

함수 이름은 함수를 식별 하기 위한 이름으로, 규칙에 맞게 자유롭게 지정할 수 있습니다

매개변수(parameter)는 함수가 외부로부터 전달받는 값으로, 여러 개를 사용할 수 있습니다.(매개변수는 선택 사항입니다.)

반환값(return value)는 함수가 작업을 마친 후 호출한 곳으로 돌려주는 값입니다. return 키워드를 사용합니다(반환값은 선택 사항입니다.)

 

위 예제와 순서도는 기본구조를 활용하여 함수를 선언하고 호출 하였을 때 입니다.

반환값은 반환 받을 값이 없기 때문에 바로 종료로 이동합니다.

✿반환값이 없을 때
반환 값(리턴 값)이 없을 때 정확히 return문을 입력하지 않았거나, return문에 반환할 값이 명시되지 않으면 파이썬은 자동으로 None이라는 아무것도 없음을 의미하는 특별한 값을 반환합니다.
None이라는 값은 눈으로 보이지는 않습니다. 하지만, 반환 될 때 None의 값으로 반환이 되는 것 입니다.

 

▶함수의 호출

함수의 호출이란 함수를 사용하려면 정의된 함수 이름과 괄호를 사용하여 호출합니다

매개변수가 있을 경우, 호출 시(인자(argument))를 전달해야 합니다.

def 함수이름() #def는 함수의 정의
#함수 이름()로 호출하는 것입니다.

위에 def는 함수를 정의하는 키워드일 뿐이지 호출 할 때는 사용하지 않아도 됩니다.

위 기본구조와 순서도 예제를 보시면 이해하는데 도움이 되실겁니다.

 

그럼 매개변수와 인자는 무엇인가?에 대해서는 아래서 따로 구분지어 설명하겠습니다.

 

▶매개변수와 인자

매개변수(Parameter)는 함수를 정의할 때, 함수가 어떤 값을 받을지 명시하는 변수이고, 인자(Argument)는 함수를 호출 할 때, 매개변수에 실제로 전달하는 값입니다.

조금 쉽게 설명하자면 매개변수는 빈컵이고 컵모양은 정해져 있지만, 아무것도 담겨있지않은 상태라고 생각하시면 됩니다. 인자는 그 컵에 따라주는 내용물이고 함수 호출 시 컵안에 실제로 물이 채워지는 것 입니다.

아래 예제를 통해 조금 더 쉽게 풀어보겠습니다.설명은 예제의 주석을 통해 확인하시면 되겠습니다.

해당예제에 return값이 없는 이유는 반환 할 값이 없고 파이썬이 자동으로 None을 반환하기 때문입니다.

return값이 필수적이지는 않습니다. 유용할 때는 특정 조건에서 함수를 조기 종료하거나, 코드의 의도를 더욱 명확히 하고 싶을 때 return을 사용하는 것이 유용할 수는 있습니다.

아래는 retrun값을 사용한 매개변수와 인자 예제와 순서도 입니다.

▶다양한 매개변수와 인자

반복문을 활용하여 다양한 매개변수와 인자를 알아보겠습니다.

(꼭 반복문을 활용하는게 아닌 다른 함수 활용도 가능)

①위치인자 (Positional Arguments)

가장 일반적인 형태의 인자로 함수 정의 시 매개변수의 순서대로 인자를 전달 합니다.

printscores 함수는 3개의 위치 인자를 받습니다.
함수 내부에서 scores 튜플을 만들고 for 반복문을 이용해 각 과목의 점수를 순서대로 출력합니다.

 

②키워드 인자 (Keyword Arguments)

함수 호출 시 이름 = 값 형태로 인자를 전달하며 이 경우 순서에 상관 없이 값을 할당 할 수 있어 가독성이 높습니다.

특히 딕셔너리 형태로 인자를 받는 경우가 많습니다.

**kwargs는 개수가 정해지지 않은 키워드 인자들을 딕셔너리 형태로 받습니다.

print_student_info 함수는 **info를 통해 키워드 인자들을 딕셔너리 형태로 받습니다. for key, value in info.items(): 구문을 사용해 딕셔너리의 모든 항목을 반복하면서 출력합니다.

 

③기본 매개변수 (Default Parameters)

함수 정의 시 매개변수에 기본값을 할당하여, 함수 호출 시 해당 인자를 생략할 수 있습니다.

 

report함수는author에미상이라는 기본값을 가집니다. 호출 시author인자를 전달하면 그 값으로, 생략하면 기본값으로 설정됩니다. data_list는 반복문을 통해 처리됩니다.
기본값은 미입력 시 이미 정해져 있던 "미상" 이라는 값으로 출력 됩니다.
기본값은 인자 입력 시 업데이트 형식으로 적용됩니다(덮어쓰기)

 

④가변 인자(*args와 **kwargs)

*args는 개수가 정해지지 않은 위치 인자들을 튜플 형태로 받습니다

**kwargs는 개수가 정해지지 않은 키워드 인자들을 딕셔너리 형태로 받습니다.(가변인자에도 포함)

numsum함수는*numbers를 통해 몇 개의 숫자가 들어오든 모두 받아서numbers라는 튜플에 저장합니다. 이후for
반복문을 통해 튜플의 모든 숫자를 더해 합계를 구합니다.

▶ 여러 값 반환

함수에서 return 문을 통해 여러 값을 쉼표로 구분하여 반환하면, 이 값들은 자동으로 튜플로 묶여 반환됩니다.

함수 호출 규칙 과 print vs return 

호출 규칙은 함수를 호출할 때 인자의 순서는 위치 인자를 먼저 쓰고, 그 뒤에 키워드 인자를 써야 합니다.

올바른 예: my_func(10, age=20)
잘못된 예: my_func(age=20, 10) (SyntaxError 발생)

왜 SyntaxError가 발생하는가?
파이썬은 함수를 호출할 때 인자들을 순서대로 매개변수에 매칭합니다.
이 과정에서 age=20, 10처럼 키워드 인자 뒤에 위치 인자가 오면 파이썬 인터프리터가 어떤 매개변수에 10을 할당해야 할지 혼란을 겪게 됩니다.
파이썬은 age=20을 보고 age라는 매개변수에 20을 할당한 뒤, 10이라는 값이 "이름 없는" 상태로 남게 되는데, 이미 키워드 인자를 처리했으므로 다음에 오는 10이 어떤 매개변수에 해당하는지 알 수 없게 됩니다.
이러한 모호성을 없애기 위해 문법 자체에서 키워드 인자 뒤에 위치 인자를 쓰는 것을 허용하지 않습니다.

✔정리
파이썬 함수 호출 시 인자는 다음 순서를 따라야 합니다.
위치 인자 (Positional Arguments)
*args (가변 위치 인자)
키워드 인자 (Keyword Arguments)
**kwargs (가변 키워드 인자)
my_func(1, 2, a=3, b=4) 와 같이 순서에 맞게 작성해야 오류 없이 실행됩니다.

 

print vs return은

print는 값을 화면에 출력하는 기능만 수행합니다.

return은 함수가 작업을 마친 후 그 결과 값을 호출한 곳으로 전달합니다. 이 값은 다른 변수에 저장하거나 다른 연산에 사용될 수 있습니다.

 

함수의 스코프

변수가 유효한 범위인 스코프는 크게 지역 스코프(Local Scope)와 전역 스코프(Global Scope)로 나뉩니다.

스코프는 변수가 효력을 가지는 범위를 말합니다.

지역 스코프(지역변수)는 함수 안에서 정의된 변수로 해당 함수 안에서만 사용 가능하며, 함수가 끝나면 사라집니다.

def add(매개변수)
	add1 = "지역 변수" # 변수 선언(지역변수)
    print(add1) #함수 내에 있는 변수 선언

add() # 출력 : 지역 변수
#print(add1) # 함수 밖에서는 함수 내에 있는 변수가 선언 되지 않음

전역 스코프(전역변수)는 코드 전체에 선언된 변수입니다. 즉 프로그램 전체에서 선언된 변수이며 함수 외부와 내부에서도 접근이 가능합니다.

add1 = "전역 변수" #함수 밖에서 변수 선언

def add(매개변수)
	print(add1)#함수 밖의 변수 접근
    
add() # 출력 : 전역 변수
print(add1) # 출력 : 전역 변수

 

전역 변수 수정: global 키워드

함수 내부에서 전역 변수의 값을 읽는 것은 가능하지만, 그 값을 직접 수정하려면 global 키워드를 사용해 해당 변수가 전역 변수임을 명시해야 합니다. global 키워드를 사용하지 않으면, 함수는 같은 이름의 새로운 지역 변수를 생성하게 됩니다.

오류의 원인은 total이라는 전역 변수가 있는데, 함수 내부에서 global 키워드 없이 같은 이름의 변수에 값을 할당했기 때문에 오류가 발생 하는데 오류를 해결하기 위해서는global키워드를 사용하여 total을 수정하겠다고 선언 하면 되겠습니다.

▶ 람다(lambda) 함수

lambda는 한 줄로 함수를 간결하게 만들 때 사용합니다. def 키워드나 return 문 없이도 표현식의 결과를 반환합니다. 주로 간단한 기능을 수행하는 함수를 즉석에서 만들 때 사용합니다.

 

이것으로 파이썬 함수에 대한 설명을 마치겠습니다~

고생하셨습니다😄

 

📘 참고:
《Do it! 점프 투 파이썬 (전면 개정 2판)》, 박응용 저, 이지스퍼블리싱, 2023
※ 본 글은 위 교재의 내용을 학습 및 정리 목적으로 요약/재구성한 글입니다.

반응형