데이터 분석/파이썬

파이썬 중급 - 함수, 전역 변수와 지역 변수, 중첩 함수, lambda 키워드

김각도 2022. 10. 17. 09:57
반응형

함수

 파이썬의 함수는 수학의 함수와 동일하다. 데이터를 함수에 입력하면 함수에 따라 연산하여 값을 출력한다. 함수는 파이썬에서 기본적으로 제공하는 내장함수와 사용자가 직접 선언하는 사용자 함수가 있다. 내장함수는 이제껏 학습한 print(), input(), sort(), reverse(), clear() 등이 있으며, 사용자 함수는 def 라는 키워드, 함수명, 콜론(:), 들여쓰기를 이용하여 선언할 수 있다. 함수명을 작명하는 방법은 변수명과 비슷하지만, 변수와는 달리 기능을 의미하는 단어로 작성해야 이후에 알아보기가 쉽다. 학습을 위해 내장 함수와 사용자 함수를 구분했지만 보통은 함수라는 명칭으로 통일된다. 사용자 함수의 작성 예시는 다음과 같다.

 

def addCal():

n1 = int(input(‘n1 입력: ’))

n2 = int(input(‘n2 입력: ’))

print(f’n1 + n2 = {n1 + n2}’)

 

addCal()

 

 addCal라는 함수명은 임의로 작성한 단어이며, 이렇게 함수를 선언하고 addCal()을 작성하여 함수를 호출하면 작성한 실행문이 출력된다. 여기까지만 보면 내장 함수를 사용하여 연산하는 것이 더 쉽게 보이지만, 함수는 특정 기능을 재사용하기 위해 사용한다. 예를 들어 덧셈 연산을 5회 실행하기 위해 내장 함수를 사용한다면 코드가 길어질 수밖에 없지만 사용자 함수를 만들어 둔다면 코드를 간결하게 작성할 수 있다.

 

 함수 내에서 또 다른 함수를 선언하고, 호출할 수도 있다. 호출하는 경우의 예시는 아래와 같다.

 

def fun1():

print(‘fun1 호출!’)

fun2()

 

def fun2():

print(‘fun2 호출!’)

fun3()

 

def fun3():

print(‘fun3 호출!’)

 

 이렇게 작성하고 fun1()을 작성하여 fun1 함수를 호출하면 ‘fun1 호출’, ‘ fun2 호출’, ‘fun3 호출이라는 문자가 순서대로 출력된다. 주의할 점은 실행문이 순서대로 실행된다는 것이다. 또한, 함수에서도 pass라는 키워드를 사용하여 실행문을 생략할 수 있다.

 

함수 호출 시 함수에 데이터를 전달할 수도 있는데, 아래와 같이 인수와 매개변수를 활용하면 된다.

 

def greet(customer):

print(f’{customer} 고객님, 안녕하세요.‘)

 

greet(‘홍길동’)

 

 여기서 홍길동은 인수이며 customer는 매개변수의 역할을 한다. 만약 인수가 2개 이상이라면, 같은 수의 매개변수가 존재해야 한다. 하지만 인수의 수가 불확실할 경우 매개변수의 첫 글자로 *라는 기호를 입력하면 인수의 개수와 상관없이 출력할 수 있다.

 

 아래와 같이 return 키워드를 사용하면 함수 실행 결과를 반환할 수 있다.

 

def calculator(n1, n2):

result = n1 + n2

 

return result

 

print(calculator(10, 20))

 

 n1 + n2 라는 함수식을 통해 연산된 값을 result에 저장하고, calculator(10, 20)이라는 코드를 작성하여 출력해보면 result에 저장된 값이 출력된다. 또는, calculator(10, 20)을 다른 변수에 저장하여 사용할 수도 있다. 반환을 굳이 사용할 필요는 없으며 반환이 필요한 경우만 사용하면 된다. 주의할 점은 함수가 return을 만나서 함수 실행 결과를 반환하게 되면 함수 실행을 종료한다는 것이다.

 

전역 변수와 지역 변수

 함수와 변수를 연관지어 보면 변수는 전역 변수와 지역 변수로 나눌 수 있다. 전역 변수란 함수 밖에서 선언되어 함수 안팎으로 모두 사용이 가능하지만, 함수 안에서 수정할 수는 없다. 지역 변수란 함수 안에서 선언된 변수로써 함수 안에서는 사용이 가능하다. 변수명이 같더라도 함수 밖에서 선언된 변수와 함수 안에서 선언된 변수는 서로 별개이다. 예를 들어 함수 밖에서 num = 10을 선언한 후 함수 안에서 num = 20으로 재선언해도 num을 출력하면 10이 출력되며 함수를 출력하면 20이 출력된다. 하지만 함수 내에서도 전역 변수를 수정할 수 있는 방법이 있는데, 다음과 같이 global 키워드를 사용하는 것이다.

 

numOut = 10

def number():

global numOut

numOut = 20

 

위와 같이 작성된 코드일 경우 함수 밖의 numOut과 함수 내의 numOut은 연동된다.

 

중첩함수

함수 내에서 또 다른 함수를 선언하는 경우, 이를 중첩함수라 부른다. 주의할 점은 함수 내에서 선언된 중첩함수는 함수 밖에서 호출할 수 없고, 함수 내에서만 사용이 가능하다는 것이다.

 

lambda 키워드

lambda 키워드를 이용하면 함수를 보다 간단하게 선언할 수 있다. 예를 들어 다음과 같은 함수 선언 코드가 있다면

 

def calculator(n1, n2):

return n1 + n2

returnValue = calculator(10, 20)

 

이 코드를 lambda 함수로 표현하면 다음과 같다.

 

calculator = lambda n1, n2: n1 + n2

returnValue = calculator(10, 20)

 

def 키워드를 이용하여 선언하는 것 보다 코드가 더 간결해진다는 장점이 있다.

 
반응형