6. 함수


반복 사용이 가능한 명령어 모음 블록인데 제어문과 다른 점은 제어문은 프로그램 문장에 존재 해야 하지만 함수는 다른 곳에 정의를 해놓고 필요할 때마다 호출을 하여 사용이 가능한 블록이라고 정의 할 수 있습니다.  함수에 값을 전달 할 수도 있고 값을 리턴 받을 수도 있고 단순히 호출만 할 수도 있습니다.

함수를 어떻게 만드는가에 따라 여러 명이 분업도 가능하고 프로그램도 깔끔하게 마무리 할 수 있습니다.

 

6.1 사용자 정의 함수


함수는 껍데기일 뿐이므로 이름만 목적에 맞게 잘 만들면 그것으로 반은 성공 한거고 안에 뭘 채우냐가 중요합니다.

 

6.1.1 함수 정의


함수의 정의는 def를 사용 하고. 함수 블록은 함수 정의 아래에 들여쓰기를 사용 합니다.  함수에 값을 전달 하려면 파라미터를 사용하고 함수를 호출한 곳으로 값을 넘기려면 return을 사용 합니다.  파라미터와 return은 필요 없으면 생략 가능 합니다.

def 함수명(*파라미터)

   수행 명령어

   수행 명령어

       ...

   return 결과 값

 

python study

 


6.1.2 함수 호출


함수 호출은 def로 정의한 함수명에 파라미터를 추가하고 함수에서 return하는 값을 받을 변수를 정의하면 됩니다.

리턴값저장변수 = 함수명(*파라미터)

 

6.1.3 예제


함수는 사용 전에 정의가 되어 있어야 합니다. hello("HongGil")이 먼저 있으면 함수를 찾을 수 없다고 오류가 발생 합니다.  함수가 복잡하면 파일로 만들어 import하여 사용 합니다.

 

#-*- coding: euc-kr -*-

 

def hello(name):

           print(name + " hello!")

 

hello("HongGil")

hello("순이")

결과

(base) F:\Python>python function101.py

HongGil hello!

순이 hello!

 

전달하는 파라미터의 갯수를 모를 경우 “*파라미터이렇게 파라미터를 대표할 수 있는 명칭 앞에 *를 사용 합니다.

def addNum(*nums):

           added = 0

           for i in nums:

                     added += i

           return added

 

numSum = addNum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

print(numSum)

결과

(base) F:\Python>python function102.py

55

 

6.1.4 global


함수 내부에서 사용되는 변수는 명칭이 동일 해도 외부와 무관합니다.  다른 사람이 만든 함수를 import 해서 사용하는데 내부에 있는 변수 명을 알 수 없을 때 동일 한 함수 명이 자신의 코드에도 존재 한다면 진짜 맨붕이 올 수 있기 때문에 전혀 다른 메모리 주소를 사용 합니다.

a = 1

def varTest(a):

           print('1st : ' + str(a))

           a = 2

           print('2nd : ' + str(a))

 

varTest(a)

print('3rd : ' + str(a))

결과

(base) F:\Python>python function103.py

1st : 1

2nd : 2

3rd : 1

난 죽어도 함수 내부에 있는 변수와 밖에 있는 변수를 동일하게 사용하고 싶다.  그러면 global 명령어를 사용하면 됩니다.

위에 있는 코드와 비교하면 알겠지만 global로 선언 하면 함수에도 적용을 하겠다는 의미로 파라미터로 전송하면 오류가 발생합니다.

a = 1

def varTest():

           global a

           print('1st : ' + str(a))

           a = 2

           print('2nd : ' + str(a))

 

varTest()

print('3rd : ' + str(a))

결과

(base) F:\Python>python function104.py

1st : 1

2nd : 2

3rd : 2

 

 

6.1.5 기본 값


함수를 호출 할 때 파라미터에 값을 넘겨주지 않아도 기본으로 설정한 값을 사용하기 위한 방법 입니다.

 

#-*- coding: euc-kr -*-

 

def levelTest(name, score, level = 90):

           if score >= level:

                     print(name + "님 축하 합니다. 테스트에 성공 했습니다!!")

           else:

                     print(name + "님 안타깝습니다. 좀더 노력 하세요.")

 

levelTest("강감찬", 95)

levelTest("홍길동", 30, 30)

결과

(base) F:\Python>python function105.py

강감찬님 축하 합니다. 테스트에 성공 했습니다!!

홍길동님 축하 합니다. 테스트에 성공 했습니다!!

 

6.1.6 return


함수로 부터 리턴되는 값은 꼭 하나일 필요는 없습니다. 콤마(,)를 사용하면 다양한 형태로 여러 개의 값을 받아올 수 있습니다.

 

#-*- coding: euc-kr -*-

 

def returnTest(i, j):

                     k = i + j

                     return i, "더하기", j, k, (i, j, k), {i, j, k}, [i, j, k]

 

r1, r2, r3, r4, r5, r6, r7 = returnTest(10, 20)

print(r1, r2, r3, r4, r5, r6, r7)

결과

(base) F:\Python>python function106.py

10 더하기 20 30 (10, 20, 30) {10, 20, 30} [10, 20, 30]

 

 

 

6.2 람다 함수


람다는 익명 함수라고 부르며 def로 선언을 하지 않지만 함수처럼 사용합니다. 인수(argument)의 제한은 없지만 표현식(expression)1개만 사용 가능 합니다.  람다함수는 오브젝트로 생성되지 않기 때문에 간단하게 사용이 가능합니다.

표현 형식은 아래와 같습니다.

lambda arguments: expression

 

람다를 선언할 때 동시에 값을 설정할 수도 있고 변수에 값을 대입하고 람다에 추가하여 사용할수도 있습니다.

>>> (lambda x : x + 10)(3)

13

>>> k = 100

>>> (lambda x : x + 200)(k)

300

>>> k = 100

>>> a = (lambda x : x + 200)(k)

>>> print(a)

300

 

람다 선언 후 함수처럼 호출 하여 사용 하는 경우

>>> a = lambda x : x + 100

>>> print(a(8))

108

>>> a = lambda x : x + ' 안녕하세요'

>>> a('홍길동')

'홍길동 안녕하세요'

 

인수가 여러 개인 경우

>>> a = lambda x, y, z : x * y * z

>>> print(a(4, 5, 6))

120

 

- copy coding -


+ Recent posts