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+b 와 a * 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 ] 파일 읽고 쓰기 (0) | 2017.03.22 |
---|---|
[ Python ] 파이썬에서 입력과 출력 (4) | 2017.03.22 |
좀 알려주세요 현기증 난단 말이에요..