32. 파이썬 함수 – 함수와 변수

  • 네이버 블로그 공유하기
  • 카카오톡 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기

파이썬 함수에 대해 공부 하고 있습니다.
정말 공부해야 할 양이 어마무시 한 거 같습니다.

함수와 변수

함수 안에서 선언한 변수의 효력 범위

함수 안에서 사용할 변수의 효력 범위에 알아보겠습니다.
함수 안에서 사용할 변수의 이름을 함수 외부에서도 똑같이 사용하면 어떻게 될까요?

Python
>>> # chrtest.py
>>> a = 10
>>> def chartest(a):
... a = a + 1
...
>>> chartest(a)
>>> print(a)
10

위의 코드를 살펴보겠습니다.
a 라는 변수를 먼저 선언한 뒤 10 이라는 숫자를 대입했습니다.
그런 다음에 chartest 라는 함수를 만들었는데 이 함수의 내용은 a 라는 입력 값을 받아서 1을 더해준뒤 결과는 리턴하지 않는 것입니다.
그리고 함수에 입력값으로 a 를 주었습니다. 그리고 print 문을 사용해 a 를 출력해 보았습니다.

얼핏 보기에는 매개변수 a 의 값에 1을 더했으니 당연히 11 이 출력될 것만 같았습니다.
하지만 실제로 실행을 해보니 그냥 원래 a 에 대입되었던 10 이 출력이 됩니다.

이렇게 되는 이유는 함수 안에서 사용하는 매개변수는 함수 안에서만 사용되기 때문입니다.
즉 함수만의 변수라고 할 수 있습니다.
def chartest(a) 라는 함수 선언에서 입력값을 전달받게 되는 a라는 매개변수는 함수 안에서 사용 되어지는 변수이므로 함수 밖의 a 라는 변수와는 상관이 없다는 의미입니다.

매개변수의 이름을 바꿔보아도 이전의 함수 chartest 함수와 동일하게 동작을 합니다.

Python
>>> def chartest(hi):
...     hi = hi + 1

한번 더 확인 해 보겠습니다.

Python
>>> # chartest_err.py
>>> def chartest(a):
...    a = a + 1
...
>>> chartest(30)
>>> print(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

얼핏 보기엔 chartest 함수의 입력값으로 30을 받고 30 + 1 을 해서 31 을 출력할것 같지만
실제로는 오류가 발생하게 됩니다.
함수안에서는 31 이 되겠죠. 하지만 a 라는 변수를 어디에서도 찾을 수가 없기에 오류가 발생하게 됩니다.
함수 안에서 선언한 매개변수는 함수 안에서만 사용되기 때문입니다.
함수 밖에서는 사용되지 않는다는 걸 다시 확인 할 수 있습니다.

이 부분은 상당히 중요한 부분으로 꼭 이해하고 넘어가야 할 듯 합니다.

함수 안에서 함수 외부의 변수 변경하기

return 사용

비주얼스튜디오 코드를 사용해 코드를 입력해 보겠습니다.

Python
# chartest_return.py
a = 10
def chartest(a):
   a = a + 10
   return a
 
 a = chartest(a)
 print(a)

먼저 return 을 사용 해 보겠습니다. chartest 함수에 입력으로 들어오는 값에 10을 더한 값을 리턴하게끔 되어 있습니다.
a = chartest(a) 라고 하면 a 에 chartest 함수의 리턴값이 대입되게 됩니다.
여기서도 chartest 함수의 매개변수 a 와 함수 외부에 a = 10 의 a 와는 별개의 것이라고 보시면 됩니다.

Python
20

global 명령어 사용

globa 이라는 명령어를 사용해서도 함수 안에서 함수 외부의 변수 변경하기 가 가능합니다.

Python
# chartest_global.py
a = 30
def chartest():
    global a
    a = a + 10

chartest()
print(a)

위 코드에서 보이듯이 chartest 함수 안에서 global a 명령은 함수 안에서 함수 밖의 a 라는 변수를 직접 사용하겠다는 의미 입니다.
그러나 실제로 프로그래밍을 진행을 할때는 global 명령어를 사용하는 것 보단 함수를 독립적으로 존재하게끔 유지하는 것이 좋다고 합니다.
외부 변수에 휘둘리는 함수가 되기 때문에 그닥 좋지가 않다는 걸 알고 있어야겠습니다.

예약어 lambda

함수를 생성할 때 사용 되는 예약어로 lambda 가 있습니다.
lambda 는 def 와 같은 역할을 합니다.
일반적으로 함수를 한 줄로 간결하게 만들려고 한다면 lambda 즉 람다를 사용해 볼 수 있습니다.
프로그래밍을 하는 중 def 를 사용 안 해도 될만큼 간단하거나 def 를 사용할 수 없는 상황에 사용되기도 합니다.

lambda 사용법

lambda의 사용법은 아래와 같습니다.

함수명 = lambda 매개변수 1, 매개변수 2,.....: 매개변수를 이용한 표현식

lambda 예제 코드

lambda 를 사용해 코딩을 해보겠습니다.

Python
>>> mmm = lambda a, b: a * b
>>> result = mmm(10, 30)
>>> print(result)
300

lambda 의 경우를 보면 위 처럼 return 명령어가 없어도 결과를 리턴 하는 것을 볼 수 있습니다.
위 예제 코드는 아래 def 를 사용한 코드와 완전히 동일합니다

Python
>>> def mmm(a, b):
...     return a * b
...
>>> result = mmm(10, 30)
>>> print(result)
300
  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
32. 파이썬 함수 변수의 효력 범위

Leave a Comment