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

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. 파이썬 함수 변수의 효력 범위

27. 파이썬 입출력값에 따른 함수의 형태 – 첫번째

27. 파이썬 입출력값에 따른 함수의 형태 – 첫번째

지난 시간에 이어 파이썬 함수 에 대해 공부하도록 하겠습니다.

매개변수와 인수

파이썬 입출력값에 따른 함수의 형태를 알아보기 전
먼저 오늘은 파이썬 함수에 사용되는 매개변수 와 인수 에 대해 알아보겠습니다.
매개변수 와 인수는 헷갈릴 수 있는 용어이니 개념을 잘 정립 하는게 좋을 듯 합니다.
먼저 매개변수는 함수에 입력받는 값을 전달하는 변수를 의미합니다.
그리고 인수는 함수를 만들고 이후 함수를 호출할 때 전달하는 입력값을 의미 합니다.
아래 예를 보겠습니다.

Python
def mmm(a, b):   # a와 b 는 매개변수 입니다.
    return a - b
print(mmm(2, 5)  # 2와 5는 인수 입니다.
  • 매개변수 – 함수에 전달된 값을 저장하는 변수
  • 인수 – 함수에 전달하는 값

파이썬에서는 이처럼 같은 의미를 가진 용어들이 종종 등장하니 주의 해야 합니다.
용어의 혼용은 파이썬 뿐만 아니라 프로그래밍을 공부하다보면 어려운 부분 중의 하나입니다.
내가 만든 프로그램도 시간이 지나서 보면 어? 그땐 어떻게 이걸 했지 라는 생각이 드는데
다른 사람이 프로그래밍 해놓은 코드를 보거나 또 그 코드의 번역본을 보다보면 의미는 같으면서도 표현이 다른 용어들을 종종 보게 될것입니다.
예를 들어보면 입력되는 값을 함수의 인수, 파라미터 ,매개변수 등으로 표현하기도 하고 리턴값을 결과값, 출력값, 반환값 등으로 표현하기도 합니다.
이렇게 용어가 다양하게 표현되지만 의미는 같은 경우가 많습니다.
이런 용어들을 기억해 놓으면 머리 아픈일은 좀 덜 할 거 같네요

파이썬 입출력값에 따른 함수의 형태

앞서 공부한 것 처럼 함수는 입력되는 값을 처리하여 그 결과를 리턴값(출력값)으로 돌려주게 됩니다.
이처럼 함수는 입출력값이 있고 없고에 따라 4가지 유형으로 나눠지게 됩니다.

일반적인 함수

보통 입력값이 있고 출력값이 있는 함수가 일반적입니다.
앞으로 우리가 프로그래밍을 하게 되면 이런 함수들이 대부분 일 것 입니다.

Python
def 함수이름(매개변수):
    수행할 문장 1
    수행할 문장 2
    ...
    return 리턴값

앞서 만들어 봤던 함수는 일반적인 함수의 전형적인 예입니다.

Python
def mmm(a, b):
    result = a - b
    return result

위 코드를 보면 mmm 이라는 함수는 a, b 두개의 입력값을 a – b 해서 그 결과값을 result 라는 변수에 대입하고 출력하게 됩니다.
위 함수를 사용해 보겠습니다.

Python
>>> a = mmm(2, 5)
>>> print(a)
-3

입력값으로 2 와 5 를 입력받아 a 변수에 출력값을 저장하고 출력했습니다.
이와 같이 입출력값이 있는 함수의 사용법은 아래와 같습니다.

리턴값(출력값)을 받을 변수 = 함수이름(입력인수 1, 입력인수 2, …)

입력값이 없는 함수

입력값이 없는 함수는 어떻게 생겨먹었을까?
다음 예를 보겠습니다.

Python
>>> def say():
...     return 'Hello'
...
>>>

위처럼 say 라는 함수를 만들고 매개변수 부분을 나타내는 함수이름 뒤의 괄호 부분은 비어있습니다.
이렇게 만들어진 say 함수를 사용해 보겠습니다

Python
>>> h = say()
>>> print(h)
Hello

이렇게 입력값이 없이 함수 이름 뒤 괄호안의 매개변수가 비어있는 입력값이 없는 함수는 사용을 할때에도 say() 처럼 괄호안에 아무것도 넣으면 안됩니다.
위 함수를 사용하면 입력값이 따로 없어도 ‘hello’ 라는 문자열을 출력하게 됩니다.
이것은 h = say() 라고 코드를 입력하게 되면 h 라는 변수에 ‘Hello’ 라는 문자열을 대입하라는 것과 동일한 것입니다.
이렇게 입력값이 없고 리턴값(출력값)만 있는 함수의 사용법은 다음과 같습니다

리턴값(출력값)을 받을 변수 = 함수이름()

이번 시간에는 파이썬 입출력값에 따른 함수의 형태 중 일반적인 함수와 입력값이 없는 함수에 대해 알아보았습니다.
다음 포스팅에 이어서 파이썬 입출력값에 따른 함수의 형태에 대해 더 알아보는 시간을 가져보겠습니다

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
27. 파이썬 입출력값에 따른 함수의 형태

26. 파이썬 함수와 입출력, 파일처리 방법

26. 파이썬 함수와 입출력, 파일처리 방법

이제부터는 파이썬 함수와 입출력, 파일처리 방법 에 대해 공부해 보겠습니다.
지난 시간까지 공부한 내용을 참고해서 봐주세요~

파이썬 입출력은 프로그래밍 설계와 관련이 있습니다.
프로그램을 만들기 전 동작을 어떻게 진행할 것인지 프로그래머가 설계를 하게 되는데
이 설계 단계에서 가장 중요하게 여기는 부분이 파이썬 입출력 설계 입니다.

함수를 만들 때 특정 프로그램만 사용하는 함수를 만들 것인지 아니면 모든 프로그램이 공통적으로 사용할 수 있게끔 함수를 만들 것인지, 또는 오픈 API 를 공개해서 외부 프로그램들 도 사용 하게끔 할 것 인지 등
이런 모든 부분이 입출력과 연관이 있습니다.

파이썬 함수

파이썬 함수의 정의

믹서기를 사용한다고 가정해 보세요
믹서에 과일 같은 것들을 넣습니다.
그리고 믹서기의 전원을 켜서 안에 들어있는 과일들을 갈아 과일 주스를 만듭니다.
여기서 우리가 믹서기에 넣은 과일들은 ‘입력’이 되는 것이고 과일 주스는 ‘출력'(결과값) 이 되는 것 입니다.
그러면 여기서 믹서기는 무엇 일까요?

26. 파이썬 함수와 입출력, 파일처리 방법
이미지 출처 : 점프투파이썬

여기서 사용되는 믹서기가 지금 공부하려고 하는 함수 와 같은 것 입니다.
입력되는 값을 가지고 어떤 작업을 진행한 뒤에 그 결과물을 출력하는 것.
그것이 함수가 하는 일 이라고 보시면 됩니다.

예전부터 우리는 함수에 대해 공부 한 적이 있지만 함수에 대해서 그닥 깊이 생각해 본 적이 별로 없을 겁니다.
예를 들어서 x = 3y + 2 같은 수식도 함수라고 할 수 있습니다.
하지만 이를 그냥 수학 시간에 배운 그래프 중 하나인 직선 그래프로만 알고 있고
y 값에 따라서 x 출력이 변화하는 함수라고는 생각을 못했을 수 있습니다.

프로그래밍에서 함수는 정말 중요한 요소 입니다.
함수에 대해서는 좀 더 깊이 생각을 해봐야 할 것입니다.

파이썬 함수 왜 사용할까?

프로그래밍을 진행 하다 보면 같은 내용을 반복해서 작성하는 경우가 종종 있습니다.
이럴 때 바로 함수를 사용하면 됩니다.
반복적으로 사용되는 경우가 있다면 ‘반복적으로 사용되는 가치 있는 부분’ 을 하나의 덩어리로 묶어서
a라는 입력 값이 주어지면 b 라는 결과값을 출력하세요~ 라는 식으로 함수로 작성하는 것이 현명한 프로그래머일 것입니다.

파이썬에서 함수를 사용하는 이유 또 한 가지는 우리가 만든 프로그램을 함수, 즉 기능 별로 구분을 해놓으면 프로그램이 어떻게 흘러가는지 알아보기가 쉽습니다.
공장에서 원재료가 공정들을 하나 하나 걸쳐 비로서 하나의 완성품이 나오는 것처럼 프로그램도 입력한 값들이 여러개 의 함수를 거치고 거쳐 우리가 원하는 결과물을 볼 수 있는 것 입니다.
이렇게 되면 프로그램의 흐름도 파악하기가 쉽고 오류가 나도 어떤 부분에서 오류가 났는지 확인하기도 쉽습니다.

파이썬 함수의 구조

파이썬 함수의 구조를 살펴보겠습니다.

Python
def 함수명(매개변수):
    수행할 문장 1
    수행할 문장 2
    수행할 문장 3
    ....

def 뒤에 함수명이 온 것을 보면 알 수 있듯이 def 는 함수를 만들때 사용하는 파이썬 예약어 입니다.
함수명은 함수를 만들 때 우리가 임의로 만들 수 있습니다.
함수명 뒤에 괄호 안에 매개변수를 넣어주는데 이 매개변수가 함수에 입력으로 전달되는 값이라고 보시면 됩니다.
이렇게 함수를 정의한 뒤에 이때까지 공부했던 if, while, for 문 등과 마찬가지로 수행할 문장 1, 2, 3… 을 입력해 주면 됩니다.
아주 간단한 예를 보겠습니다

Python
def mmmm(a, b):
    return a - b

위 예를 살펴보면 함수의 이름은 mmm 이고 a 와 b 두개의 입력값을 받아서
a에서 b를 뺀 결과를 리턴값으로 하라는 예입니다.
여기에서 사용되는 return 은 함수의 결과값을 돌려주라는 명령어입니다.
실제 위 예를 사용해 보겠습니다.

Python
>>> def mmm(a, b):
...     return a -b
...

mmm 이라는 함수가 만들어 졌습니다.
만들어진 mmm 함수를 사용해 보겠습니다.

Python
>>> a = 2
>>> b = 5
>>> c = mmm(a, b)
>>> print(c)
-3

변수 a 에는 2, b 에는 5 를 대입하고 앞에 만든 mmm 함수에 a와 b 를 입력 값으로 넣어 줬습니다.
그리고 변수 c 에는 mmm 함수의 리턴 값을 대입해줬습니다.
마지막으로 print(c) 로 mmm 함수를 적용한 c 의 결과 값을 확인 할 수 있습니다..

이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.

26. 파이썬 함수와 입출력, 파일처리 방법