반응형

함수는 메서드(method)라고도 합니다.

함수는 코드의 다른 위치에서 여러 번 실행해야 하는 코드를 다른 데이터로 캡슐화하는 데 사용됩니다. 예를 들어 코드에서 함수 없이 복잡한 수학 공식을 여러 번 구현하려면 공식을 여러 번 구현하는 코드를 작성해야 합니다. 함수를 사용하면 수식을 구현하는 코드를 한 번만 작성하면 해당 코드를 실행해야 할 때마다 단일 명령으로 함수를 호출할 수 있습니다.

 

함수를 사용하면 많은 코드 줄을 절약할 수 있을 뿐만 아니라 사용성을 높일 수 있습니다. 한 응용 프로그램에 정의된 기능은 수정 여부에 관계없이 다른 응용 프로그램에서 사용할 수 있습니다. 마지막으로, 함수는 객체 지향 프로그래밍의 필수적인 부분입니다.

 

함수를 정의하려면 def 키워드를 사용하고 그 뒤에 함수 이름과 한 쌍의 괄호를 사용할 수 있습니다. 예를 들어, 다음 스크립트는 my_function()이라는 함수를 정의합니다. 이 함수는 콘솔에 간단한 문자열을 출력합니다.

 

def my_function():

  print("This is my first function")

 

함수 내에서 코드를 실행하려면 함수를 호출해야 합니다. 함수를 호출하려면 함수 이름 뒤에 괄호 쌍을 지정해야 합니다. 다음 스크립트는 my_function() 함수를 호출합니다.

 

# calling the my_function() function

my_function()

 

Output:

This is my first function

 

다음 스크립트는 구구단의 7단을 출력하는 함수를 만들고 함수를 호출하여 출력하는 예제입니다.

 

def print_seven():

  for i in range(1, 10):

    print("7 x ", str(i), " = ", str(7*i))

  

print_seven()

 

Output:

7 x  1  =  7

7 x  2  =  14

7 x  3  =  21

7 x  4  =  28

7 x  5  =  35

7 x  6  =  42

7 x  7  =  49

7 x  8  =  56

7 x  9  =  63

 

매개변수화된 함수

매개변수화된 함수는 데이터를 전달할 수 있는 함수입니다. 함수에 전달된 데이터를 저장할 변수를 함수 매개변수라고 하며 괄호 안에 정의됩니다. 예를 들어 다음 함수에는 message라는 매개변수가 하나 있습니다. 이 매개변수에 값을 전달하면 for 루프를 사용하여 출력이 5번 표시됩니다.

 

def show_message(message):

  for _ in range(5):

    print(message)

 

show_message("function test")

 

Output:

function test

function test

function test

function test

function test

 

함수에 여러 매개변수를 전달할 수도 있습니다. 예를 들어, 다음 함수는 message count라는 두 개의 매개변수를 사용합니다. message 매개변수에 전달된 값은 count 매개변수에 전달된 값의 횟수만큼 콘솔에 인쇄됩니다. count 매개변수에 3을 입력하였으므로 message3번 출력됩니다.

 

def show_message(messagecount):

  for _ in range(count):

    print(message)

 

show_message("function test", 3)

 

Output:

function test

function test

function test

 

매개변수화된 함수의 또 다른 예를 살펴보겠습니다. 다음 스크립트는 add_numbers()라는 이름의 함수를 정의합니다. 이 함수는 세 개의 매개변수 값을 계산하고 그 합계를 콘솔에 출력합니다. 3개의 매개변수에 각각 a=3, b=2, c=3을 입력하면 3개를 합산하여 출력합니다.

 

def add_number(abc):

  result = a + b + c

  print(result)

 

add_number(3, 2, 3)

 

Output:

8

 

마지막으로 다음 스크립트는 display_table() 함수에 매개변수로 전달된 숫자의 구구단을 출력하는 display_table() 함수를 정의하고 매개변수로 3을 입력하고 display_table(3)을 호출하였습니다.

 

def print_table(num):

  for i in range(1, 10):

    print(str(num), " x ", str(i), " = ", str(num*i))

  

print_table(3)

 

Output:

3  x  1  =  3

3  x  2  =  6

3  x  3  =  9

3  x  4  =  12

3  x  5  =  15

3  x  6  =  18

3  x  7  =  21

3  x  8  =  24

3  x  9  =  27

 

함수로부터 리턴값을 반환(리턴)하는 방법

함수에 값을 전달할 수 있는 것처럼 함수도 값을 반환할 수 있습니다. 함수에서 값을 반환하지 않으면 함수의 결과를 저장하는 변수에 null 값이 저장됩니다. 예를 들어 다음 스크립트를 실행하면 add_numbers() 함수가 실행되고 출력에 숫자 8이 출력됩니다.

 

def add_number(abc):

  result = a + b + c

  print(result)

 

result = add_number(3, 2, 3)

 

숫자 8add_number()함수 내에서 print()함수로 출력한 결과입니다. 함수 외부에 정의된 결과 변수인 result에는 저장되지 않습니다. 결과 변수의 값을 출력해 보면 None입니다.

 

def add_number(abc):

  result = a + b + c

  print(result)

 

result = add_number(3, 2, 3)

print(result)

 

Output:

8

None

 

함수가 값을 반환하게 하려면 return 키워드를 사용해야 합니다. 반환될 값은 return 키워드 다음에 옵니다. 예를 들어 다음 스크립트에서 add_numbers() 메서드는 결과 변수에 저장된 값을 함수 호출에 반환합니다. 함수 외부에 정의된 결과를 출력해보면 result8이 담겨있는 것을 확인할 수 있습니다.

 

def add_number(abc):

  result = a + b + c

  return result

 

result = add_number(3, 2, 3)

print(result)

 

Output:

8

 

함수가 여러 값을 반환하도록 만들 수도 있습니다. 값은 튜플 형식으로 반환됩니다. 다음 스크립트는 3개의 매개변수 값을 입력하고 3개의 리턴값을 출력하는 예제입니다.

 

def add_number(abc):

  result_a = a * 3

  result_b = b * 3

  result_c = c * 3

  return result_a, result_b, result_c

 

x, y, z = add_number(3, 2, 3)

print(x)

print(y)

print(z)

 

Output:

9

6

9

 

매개변수 입력값이 몇 개가 될지 모를 경우 처리하는 방법

매개변수에 *를 사용하면 매개변수로 몇 개를 입력해도 상관없습니다.  매개변수 이름 앞에 *를 붙이면 입력값을 전부 모아서 튜플로 만들어 줍니다. 다음 스크립트는 add_many(*args)함수를 정의하고 매개변수에 3, 2, 3을 입력하고 함수를 호출하였습니다.

 

def add_many(*args):

  result = 0

  for i in args:

    result = result + i

  return result

 

result = add_many(3, 2, 3)

print(result)

 

Output:

8

 

add_many()를 호출시에 입력으로 10개를 사용하더라도 add_many(*args)로 가능합니다.

 

def add_many(*args):

  result = 0

  for i in args:

    result = result + i

  return result

 

result = add_many(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

print(result)

 

Output:

55

 

키워드 파라메터

매개변수 앞에 별 두개(**)를 붙이면 입력값을 딕셔너리로 만들어줍니다. 다음 스크립트를 참조하시면 됩니다.

 

def print_kwargs(**kargs):  

  for i in kargs:

    print(i, " = ", kargs[i])

  

print_kwargs(a=3, b = 3)

 

Output:

a  =  3

b  =  3

 

전역 변수와 로컬 변수 그리고 함수

정의된 위치에 따라 Python 변수 및 함수는 전역 및 로컬의 두 가지 유형으로 나눌 수 있습니다. 함수나 클래스 외부에 정의된 변수를 전역 변수라고 합니다. 전역 변수는 어디에서나 액세스할 수 있습니다. 반면에 지역 변수는 함수 내부에 정의됩니다. 지역 변수는 함수 내에서만 접근할 수 있습니다. 다음 스크립트는 하나의 전역 변수 num1과 하나의 지역 변수 num2를 정의합니다. num1 변수는 add_ten() 함수 내에서 액세스할 수 있습니다. 함수 내부에 num1 num2 변수가 추가됩니다.

 

# global variable

num1 = 7

 

def add_ten():

  # local variable

  num2 = 3

  result = num2 + num1

 

print(result)

 

add_ten()

 

위의 스크립트를 실행하면 add_ten() 함수 내부를 포함한 모든 곳에서 전역 변수 num1에 액세스할 수 있기 때문에 오류가 발생하지 않는 것을 볼 수 있습니다.

 

Output:

15

 

다음 스크립트에서는 add_ten() 함수 외부에서 전역 변수 num1과 지역 변수 num2에 모두 액세스하려고 합니다.

 

# global variable

num1 = 7

 

def add_ten():

  # local variable

  num2 = 3

  result = num2 + num1

  print(result)

 

add_ten()

print(num1)

print(num2)

 

출력에서 num2 변수가 정의되지 않았다는 오류가 표시됩니다. 이는 num2 변수가 add_ten() 함수 내부의 지역 변수이고 Python 인터프리터가 add_ten() 함수 외부에서 이를 찾을 수 없기 때문입니다.

 

---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-33-129c9a7c52f3> in <module>()
     10 add_ten()
     11 print(num1)
---> 12 print(num2)

반응형

+ Recent posts