본문 바로가기
파이썬/파이썬기본문법

파이썬 함수(functions)

by flycoding 2023. 11. 11.
반응형

함수는 호출될 때만 실행되는 코드 블록입니다.

매개변수로 알려진 데이터를 함수에 전달할 수 있습니다.

함수는 결과적으로 데이터를 반환할 수 있습니다.

 

파이썬 함수 만들기

파이썬에서는 def 키워드를 사용하여 함수를 정의합니다:

def my_function():
  print("Hello function")

 

함수 호출

함수를 호출하려면 함수 이름과 괄호를 사용합니다:

def my_function():
  print("Hello from a function")

my_function()

위의 코드를 실행하면  my_function() 함수가 호출이 되고 함수 바디에 print()구문이 실행이 된다.

위의 코드를 실행하면 아래 그림과 같다.

파이썬 함수 호출 활용 예제

 

파이썬 함수 인수

정보는 인수로서 함수에 전달될 수 있다.
인수는 함수 이름 뒤에 괄호 안에 지정된다. 원하는 만큼 인수를 추가할 수 있으며 쉼표로 구분하면 된다.

다음 예제는 인수(fname)가 하나인 함수를 가지고 있다. 함수가 호출되면 전체 이름을 인쇄하기 위해 함수 내부에 사용되는 이름을 전달한다:

def my_function(arg):
  print(arg + " 집")

my_function("홍길동")
my_function("김철수")
my_function("이영희")

my_function(arg) 함수에 인수 arg가 정의되어 있다. my_function()함수 내에 print()구문에 활용이 된다.

함수 호출할 때 인수값이 각각 '홍길동', '김철수', '이영희' 인수 값이 전달이 되며 my_function()함수가 호출이 되어 화면에 인쇄가 된다.

위의 코드를 실행하면 아래 그림과 같다.

파이썬 함수 인수 활용 예제

 

파이썬 매개변수 혹은 인수?

매개 변수와 인수라는 용어는 함수에 전달되는 정보와 같은 것에 사용될 수 있다.

 

함수의 관점에서:
매개변수는 함수 정의에서 괄호 안에 나열된 변수이다.

인수는 함수가 호출될 때 함수로 전송되는 값입니다

 

파이썬 함수 인수의 개수

기본적으로 함수는 올바른 인수 개수로 호출되어야 한다. 함수가 2개의 인수를 예상하는 경우, 그 이상도 아니고 그 이하도 아닌 2개의 인수로 함수를 호출해야 한다는 것을 의미한다.

def my_function(arg1, arg2):
  print(arg1 + " " + arg2)

my_function("홍", "길동")

def my_function(arg1, arg2): 인수가 2개로 호출할 때 인수값 "홍", "길동" 2개를 전달한다.

위의 코드를 실행하면 아래 그림과 같다.

파이썬 함수 인수 개수 활용 예제

 

파이썬 함수 임의의 인수, *arg

함수에 전달할 인수 수를 모르는 경우 함수 정의의 매개 변수 이름 앞에 *를 추가한다.

이렇게 하면 함수는 인수 튜플을 받고 그에 따라 항목에 액세스할 수 있다:

def my_function(*kids):
  print("가장 어린 아이 이름은 " + kids[2])

my_function("길동", "철수", "영희")

my_function(*kids)의 인수가 *arg로 임의의 인수를 받도록 정의하였다. my_functin() 호출시 3개의 인수를 전달하였고 kids는 튜플로 받아 kids[2] 세번째 인수값 '영희'를 인쇄하였다.

위의 코드를 실행하면 아래 그림과 같다.

파이썬 함수 임의의 인수 *arg 튜플 활용 예제

 

파이썬 함수 키워드 argument

key = value 구문을 사용하여 인수를 보낼 수도 있다.

이렇게 하면 논쟁의 순서는 중요하지 않다.

def my_function(child3, child2, child1):
  print("가장 어린 아이 이름은 " + child3)

my_function(child1 = "길동", child2 = "철수", child3 = "영희")

함수 호출할 때 child1 = "길동", child2 = "철수", child3 = "영희" child1, child2, child3 인수에 값을 명시적으로 할당하였으며

def my_functions(child3, child2, child1):로 인수를 받을 때 순서는 중요하지 않고 인수변수에 맞추어서 값이 할당이 된다.

위의 코드를 실행하면 아래 그림과 같다.

파이썬 함수 인수 key=value 활용예제

 

파이썬 함수 임의의 키워드 인수, **arguments

함수에 전달할 키워드 인수의 수를 모르는 경우, 함수 정의의 매개 변수 이름 앞에 별표 2개를 추가한다.

이렇게 하면 함수는 인수 사전을 받고 그에 따라 항목에 액세스할 수 있다:

 

키워드 인수의 수를 알 수 없는 경우, 매개 변수 이름 앞에  **을 추가한다:

def my_function(**kid):
  print("이름은 " + kid["이름"])

my_function(성 = "홍", 이름 = "길동")

위의 코드를 실행하면 아래 그림과 같다.

파이썬 함수 인수 임의의 키워드 **arg 활용 예제

 

파이썬 함수 초기 매개변수 값

다음 예제에서는 기본 매개 변수 값을 사용하는 방법을 보여 준다.

인수 없이 함수를 호출하면 기본값을 사용한다:

def my_function(country = "노르웨이"):
  print("내 나라는 " + country)

my_function("대한민국")
my_function("프랑스")
my_function()
my_function("브라질")

def my_functino(country="노르웨이") 구문은 country 매겨변수 초기값을 "노르웨이"로 설정하였고, 

my_function()함수에서 인자의 값이 없는 3번째 호출의 경우에는 country값이 '노르웨이'로 설정이 된다.

위의 코드를 실행하면 아래 그림과 같다.

파이썬 함수 초기 매개변수 값 설정 활용 예제

 

파이썬 함수 리스트 인수 전달

함수에 모든 데이터 형식의 인수( 문자열, 숫자, 목록, 사전 등)를 보낼 수 있으며, 함수 내에서 동일한 데이터 형식으로 처리된다.

예를 들어 인수로 리스트를 보내도 함수에 도달해도 리스트가 된다:

def my_function(food):
  for x in food:
    print(x)

fruits = ["사과", "바나나", "체리"]

my_function(fruits)

fruits는 리스트 변수로 my_function()인수로 전달이 된다. 

함수 my_function() 정의 부분에 food 매개변수는 리스트로 값을 전달받게 된다.

위의 코드를 실행하면 아래 그림과 같다.

파이썬 함수 리스트 인수 전달 활용 예제

 

파이썬 함수 값 반환 - return

함수가 값을 반환하도록 하려면 return 문을 사용합니다:

def my_function(x):
  return 3 * x

print(my_function(5))
print(my_function(7))
print(my_function(9))

return 3*x 구문은 매겨변수 x에 3을 곱한 값을 반환한다.

그러므로 처음 호출에서 my_function(5)구문은 3*5 가 되므로 15값이 화면에 인쇄된다.

두번째 호출에서 my_function(5)구문은 3*7 가 되므로 21값이 화면에 인쇄된다.

세번째 호출에서 my_function(5)구문은 3*9 가 되므로 27값이 화면에 인쇄된다.

위의 코드를 실행하면 아래 그림과 같다.

파이썬 함수 값 반환 return 활용 예제

 

파이썬 함수 pass 구문

함수 정의는 비워 둘 수 없지만 어떤 이유로 내용이 없는 함수 정의를 가진 경우 오류가 발생하지 않도록 pass 문을 입력한다.

def myfunction():
  pass

 

파이썬 재귀함수

파이썬은 함수 재귀도 받아들이는데, 이것은 정의된 함수가 스스로를 부를 수 있다는 것을 의미한다.

재귀는 수학적이고 프로그래밍적인 일반적인 개념이다. 그것은 함수가 스스로를 부른다는 것을 의미한다. 이것은 결과에 도달하기 위해 데이터를 순환할 수 있다는 의미를 가지고 있다.

개발자는 재귀를 매우 조심해야 한다. 왜냐하면 결코 종료되지 않는 함수나 과도한 양의 메모리 또는 프로세서 전력을 사용하는 함수를 쓰는 것은 꽤 쉬울 수 있기 때문이다. 그러나 올바르게 쓰였을 때 재귀는 프로그래밍에 매우 효율적이고 수학적으로 우아한 접근법이 될 수 있다.

이 예제에서 tri_recursion()은 우리가 스스로를 "재귀"라고 부르기 위해 정의한 함수이다. 우리는 k 변수를 데이터로 사용하고, 이 변수는 우리가 재발할 때마다 감소(-1)한다. 재귀는 조건이 0보다 크지 않을 때(즉, 0일 때) 종료된다.

새로운 개발자에게는 이것이 정확히 어떻게 작동하는지 알아내는 데 시간이 걸릴 수 있다. 가장 좋은 방법은 테스트하고 수정하는 것이다.

def tri_recursion(k):
  if(k > 0):
    result = k + tri_recursion(k - 1)
    print(result)
  else:
    result = 0
  return result

print("\n파이썬 재귀함수 예제")
tri_recursion(6)

k=6, 6 + tri_recursion(6-1) -> 6 + 5 + 4 + 3 + 2 + 1

k=5, 5 + tri_recursion(5-1) -> 5 + 4 + 3 + 2 + 1

k=4, 4 + tri_recursion(4-1) -> 4 + 3 + 2 + 1

k=3, 3 + tri_recursion(3-1) -> 3 + 2 + 1

k=2, 2 + tri_recursion(2-1) -> 2 + 1

k=1, 1 + tri_recursion(1-1) -> 1 + 0

위의 값들은 스택에 저장이 되어서 하나씩 빼나가면서 값이 아래 그림과 같이 화면에 인쇄된다.

위의 코드를 실행하면 아래 그림과 같다.

파이썬 재귀함수 활용 예제

 

지금까지 파이썬 함수에 대해서 살펴보았다. 

함수의 정의와 호출, 그리고 다양한 인수에 대해서 살펴보았다.

꼭 손으로 눈으로 머리로 익히며 실습하기를 바란다.

모두 화이팅입니다.!!!

 

출처 : 이 글의 출처는 w3schools사이트를 참고하였으며 필자가 추가하여 정리한 글입니다.

반응형

'파이썬 > 파이썬기본문법' 카테고리의 다른 글

파이썬 배열 (Python Arrays)  (0) 2023.11.13
파이썬 람다함수 - Lambda functions  (1) 2023.11.12
파이썬 for 루프  (0) 2023.11.10
파이썬 while 루프(while loop)  (0) 2023.11.09
파이썬 if ... else  (0) 2023.11.08

댓글