티스토리 뷰

python - 함수



  함수


   - 토스트 기계를 생각해볼때, 빵(입력)을 토스트기계에 넣으면 토스트 기계는 구워진 빵(출력)을 돌려준다. 빵이라는 

     입력을통해 구워진 빵이라는 결과를 얻어내는 셈이다. 여기서 토스트 기계를 함수라고 생각하면된다.



 ↑ 함수를 표현한 그림


   - 프로그래밍을 할때 같은 표현을 여러번 쓸때가 종종 있다. 이때가 바로 함수가 필요한 때이다. 즉, 반복되는

     부분이 있을 경우 그 표현을 묶어서 필요한 때에 사용한다면 프로그래밍을 좀더 정갈하게 할 수 있다.

     또한 함수의 사용은 프로그램의 흐름을 일목요연하게 볼 수 있다. 결국 함수를 잘 이용하고 적절하게 만들어낼

     줄 알아야 한다.



  파이썬 함수의 기본 구조




 ↑ def는 함수를 만들 때 사용하는 예약어이다.

   # 함수 명은 함수를 만드는 사람이 임의로 설정가능

   # 함수명 뒤의 입력 인수는 이 함수에 입력될 값





 ↑ 이 함수의 이름은 sum이고 입력 인수로 2개의 값을 받으며 결과값은 2개의 입력값을 더한 값이다.

    # 입력값을 다른 말로 함수의 인수, 입력 인수 라고 하기도한다.

    # 결과값을 출력값, 리턴값, 돌려주는 값이라고 하기도 한다.

        >>  번역의 차이 일뿐








  입력값과 결과값에 따른 함수의 형태


   - 함수는 들어온 입력값을 받아 어떤 처리를 하여 적절한 결과값으로 돌려준다.


입력값 >>> 함수 >>> 리턴값


   - 함수의 형태는 입력값과 결과값의 존재 유무에 따라 4가지로 구분





  1. 입력값과 결과값에 따른 함수의 형태 - 입력값이 없는 함수



 ↑ 위의 함수를 쓰기 위해서는 give()처럼 괄호 안에 아무값도 넣지 않아야 한다.

    # 이 함수는 입력값은 없지만 결과값으로 love라는 문자열을 돌려준다.

    # res = give()작성시 res='love'가 된다.


 결과값을 받을 변수 = 함수명 ()

 







  2. 입력값과 결과값에 따른 함수의 형태 - 결과값이 없는 함수




 ↑ 5, 10의 합은 15 입니다  라는 결과값을 돌려주는것이 아니라, print()함수를 실행한 것이다.

    # 결과값은 오직 return 명령어로만 돌려 받을 수 있다.

  

  함수명 (입력 인수1, 입력인수2, ...)



 ↑ 결과값이 없음을 증명하는 경우, 변수 res값은 None이다. None은 거짓을 표현한는 자료형이다.

    # 변수 res에 total함수에 대한 결과없이 없기 때문에 거짓이 된다.




  3. 입력값과 결과값에 따른 함수의 형태 - 입력값도 결과값도  없는 함수




 ↑ 입력 인수를 받는 곳도 없고 return값도 없는 함수

   # 함수명을 입력하고 수행할 문장만 수행된다.


 함수명( )







  4. 입력값이 여러개인경우 혹은 몇개가 될지 모를 경우


   - 입력값이 여러 개일 때 혹은 입력값을 몇개 입력해야할지 모를대 파이썬에서 제공하는 기능이 있다.




 ↑ 함수의 형태에서 입력변수 부분에 *를 추가해 주었다.



 ↑ total_many라는 함수는 입력값이 몇 개 이든 상관 없다. 

    # *nums 처럼 변수 앞에 *을 붙이면 입력값을 전부 모아서 튜플로 만들어 준다.

    # total_many(1,2,3)  → nums( 1,2,3 ) 이된다.

    # 함수이름은 임의로 정할 수 있다.





 ↑ 함수의 인수를  *nums만 사용할 수 있는 것은 아니다.

    # 입력값이 total인지 mul인지에 따라 조건문이 다르게 수행된다.

    # 입력값 설정후 개수에 상관없는 수를 입력한다.

    # 선택적으로 유용하게 사용할 수 있다.





  함수의 결과값은 언제나 하나이다




 ↑ 결과값은 a+ba * b 2개인데 받아들이는 변수는 res 하나만 쓰였다.

   # 함수의 결과값은 2개가 아니라 언제나 1개이다.

   # cal 함수의 결과값은 a + b와 a * b는 튜플값 하나인 ( a + b , a * b )로 돌려준다.

   # 즉 결과값으로 변수 res는 ( 15, 20 )라는 튜플 값을 갖는다.




 ↑ 하나의 튜플값을 2개의 결과값처럼 받고 싶을때 파이썬의 독특한 변수 선언방식을 이용하면 된다.





 ↑ 함수를 사용하면 2번째 return문은 실행되지 않았다.

    # 함수는 return문을 만나는 순간 결과값을 돌려준 다음 함수를 빠져나간다.



 ↑조건에 맞는 상황이 될때 return을 단독으로 사용하여 함수를 즉시 빠져나갈 수 있다.

    # 나이가 20보다 크면 함수를 빠져나온다.

    # 나이가 20보다 크지 않으면 print()함수를 수행한다.






  함수 입력값 초기화하기



 ↑함수 student의 입력값은 name, student_id, man=True 3개이다.

    # man=True 처럼 입력값을 미리 넣어주는 방법을 입력값 초기화 라고 한다.( =초깃값 )

    # man에는 입력값을 주지 않아도 초깃값인 True값을 가진다.

    # 초기값을 설정할때는 입력하는 값과 함수의 인수의 위치가 같아야한다.

    # 초기화 시키고 싶은 입력 변수들을 항상 뒤쪽에 위치 시키자




  함수 안에서 선언된 변수의 범위 - 지역변수



 ↑선언된 변수 a가 함수 test를 통해 a=2( a += 1 ) 라는 결과를 돌려줄것 같지만 그렇지 않다.

    # def test(a)에서 입력 인수를 뜻하는 변수 a는 함수 안에서만 사용되는 지역 변수이다.

    # 이는 함수 밖에서는 사용되는 변수와는 별개의 독립된 변수이다.

    # print( a ) 는 함수 밖에서 선언된 a를 출력해 준것



 ↑위와같은 오류도 같은 맥락이다.

    # print(a)에서 입력 받아야하는 a라는 변수를 찾을 수 없다. 

    # 함수 test 안에서 선언한 변수 a는 함수안에서만 유효하다.

    # 지역변수 




  함수 안에서 선언된 변수의 범위 - 전역변수( global ) 



 ↑test함수에 입력으로 들어온 1을 더한 값을 return을 통해서 돌려준다. 

   # 함수 밖에 있는 변수 a에 test함수의 return값을 대입해준다.

   # 여기서도 함수안의 a와 함수 밖의 a다른 변수이다.




 ↑global 명령을 test함수 안에서 사용할때 global a라는 문장은 함수 안에서 함수 밖의 변수 a를 직접 사용하겠다는 뜻이다.

    # global명령을 사용할때에는 변수가 꼬이지 않게 주의해서 변수명을 설정해야한다.

    # 함수는 독립적으로 존재하는게 좋은 모양새이다.


'Python > [ Python ] 함수' 카테고리의 다른 글

[ Python ] 파일 읽고 쓰기  (0) 2017.03.22
[ Python ] 파이썬에서 입력과 출력  (4) 2017.03.22