본문 바로가기
[파이썬]/함수

[파이썬] 함수

by sung min_Kim 2023. 11. 8.
함수, def(defind)

재사용 가능한 코드블록

 

 함수는 코드의 반복을 줄이기 위해 사용한다.

 코드 블록의 형태로 가독성을 높이고 코드의 이해와 어떤 동작을 하는지 파악하기가 쉬우며,

유지보수를 하기에도 좋다.

또한, 함수를 변수에 담아 다른 곳에서 호출하여 이를 활용할 수도 있다.

 


·  기본 형태

 

함수의 기본 형태이다.

 

def 함수명(변수1, 변수2, ...):
	실행문1, 실행문2, ...
	return 결과 값

 

  • 변수는 함수의 파라미터를 의미한다.

  • 실행문은 파라미터에 대한 로직을 처리하고 이를 실행한다.

  • return은 실행문의 결과 값을 반환한다.

 


· 동작 원리

 

 함수를 동작하면 함수 내부의 로직이 실행된다.

 이때, 함수 내부에서 사용할 인자의 존재 유무에 따라 파라미터를 생략하기도 한다.

 

 그 예를 살펴보도록 하자.

 

 · 파라미터가 없는 경우

 

 함수 내부에서 사용할 인자가 없는 경우, 파라미터 생략이 가능하다.

 함수를 동작하면 함수 내부의 로직이 실행된다.

 해당 함수를 변수나 다른 함수에 담아 활용할 생각이 없다면 return 또한 생략이 가능하다. 

 

def ex():
    print('실행')
    
ex() # 실행 출력

 

 리턴된 값이 없다면 함수는 암묵적으로 None을 출력한다.

 

print(ex()) # 실행
            # None 출력

 

 

 · 파라미터가 존재하는 경우

 

 반대로 함수를 호출할 때, 사용할 인자가 존재한다면 파라미터를 해당 인자로 정의할 수 있다.

 함수 내부에서는 정의된 파라미터를 가지고 원하는 로직을 실행하고, 이를 반환한다. 

a = 2
b = 3

def sum(a, b):
  res = a + b
  return res

sum(a, b) # 5 출력

 sum 함수는 함수 외부의 인자(=글로벌 변수) a와 b를 각 각 sum 함수의 파라미터로 정의하여, 로직을 실행한다.

 실행 로직에 대한 결과 값을 res에 할당 및 이를 리턴하였다.

 외부에서는 리턴된 결과 값을 활용할 수 있게 된다.

 


 · 함수의 활용

 

 함수는 크게 변수와 함수에 담아 활용할 수 있다.

 먼저 변수에 담아 사용하는 예를 살펴보도록 하자.

 

 · 변수에 함수 할당

 

  •   변수에 함수의 결과 값을 할당하는 경우
x = 10

def sum(parameter):
	result = parameter + 2
	return result
    
output = sum(x)

 

 x는 함수 외부에서 선언된 글로벌 변수이다.

 이 변수를 sum 함수 내부에서 사용하기 위해 파라미터로 정의하였고, 함수 내부에서 해당 파라미터를 활용하여 로직을 작성하고 실행문을 실행한다.

 결과 값으로 12를 리턴하는 sum 함수를 생성한다.

 

 output 변수는 리턴된 sum 함수를 호출하여 결과 값인 result를 할당받는다.

 그리하여 output = sum(x)은 12라는 값을 출력한다.

 이렇게 리턴된 함수의 결과 값을 변수에 담아 활용할 수 있다.

 

 위의 예를 덧대어 말하자면, 파이썬은 인터프리터의 특성을 가지고 있다.

 파이썬의 인터프리터는 할당문을 표현식으로 간주하지 않기 때문에 리턴된 결과가 자동으로 출력되지 않는다.

 따라서, output 변수의 값을 명시적으로 출력하면 할당된 값을 확인할 수 있다.

output = sum(x) ** 2
print(output) # 144 출력

 

 

  • 변수에 함수 자체를 할당하는 경우
x = 10

def sum(parameter):
	result = parameter + 2
	return result
    
output = sum
output(x) **2 # 144 출력

 

 output = sum() 코드와 output = sum 코드는 아예 다르다.

 전자의 코드는 sum 함수의 결과 값(result)을 output에 할당한다는 의미이고,

 후자의 코드는 sum 함수 자체를 output에 할당한다는 의미이다.

 따라서, 변수 output 은 sum 함수로 취급된다. 

 

· 함수에 함수 할당

 

def bye(a, b):
	print('누가 실행 시키는지 로고를 남길 수 있다.')
	a(b)

def hello(x):
    print('hello', x)
    
bye(hello, 'x')

 

 서로 다른 함수 bye와 hello가 있다. bye 함수에 hello 함수를 할당한 모습을 볼 수 있다. 그 과정을 살펴보자.

 

 bye(hello, 'x') 로직을 보면, hello 함수는 bye 함수의 첫 번째 파라미터로 정의되며, bye 함수의 a 자리를 대체한다.

 (함수를 다른 함수에서 사용할 때, 첫 번째 파라미터에 위치해야 한다.)

 

 'x'는 bye 함수의 두 번째 파라미터 b 자리를 대체한다.

 

 이해를 돕기 위해 bye 함수에 각 각의 파라미터가 대입된 모습을 예로 작성하였다.

 

def bye(hello, 'x'):
	print('누가 실행 시키는지 로고를 남길 수 있다.')
	hello('x')

 

 최종적으로 이러한 형태로서 bye 함수가 동작하게 된다.

 해당 함수를 실행하면 print, hello('x') 함수가 순서대로 동작하게 된다.

 hello('x') 함수는 아래와 같이 동작하게 된다.

 

def hello('x'):
    print('hello', 'x')

 

 이때, hello 함수 안의 파라미터 'x'는 기존의 파라미터 x를 대체한다.

 

 따라서, bye(hello, 'x') 함수의 출력 값은 아래와 같이 출력된다.

 

누가 실행 시키는지 로고를 남길 수 있다.
hello x

 

 


 

파이썬의 함수에 대해 알아보았다.

 

인자를 외부에서 가져와 사용하거나, 함수를 변수에 할당하여 사용할 때, 그리고 함수를 함수에 할당하여 사용할 때의 각 상황들이 코드 상으로는 간략해 보여서 쉬운듯하였지만 꽤나 헷갈리는 부분이 많았다.

 

머릿속으로 대충은 그려지지만 논리적으로 따지고 들어가 보면 왜 그런지 확실히 와닿지 않는 부분 또한 존재하였다.

 

코드의 흐름을 이해하는데 많은 노력을 기울이도록 하자. 

'[파이썬] > 함수' 카테고리의 다른 글

[파이썬][함수] 클로저 함수  (2) 2023.11.15
[파이썬][함수] 데코레이터 함수  (2) 2023.11.15
[파이썬] 람다 함수  (0) 2023.11.09