본문 바로가기

개발자 레니는 지금 -/소프트웨어와 함께

ING - [ Do it! Jump to Python ] 04 프로그램의 입력과 출력은 어떻게 해야 할까?



04 프로그램의 입력과 출력은 어떻게 해야 할까?





04-1 함수



- 입력값을 가지고 어떤 일을 수행한 다음에 그 결과물을 내어놓는 것이 함수가 하는 일이다. = 어떤 입력에 대한 작업의 결과를 출력해주는 것.

- 반복되는 부분이 있을 경우 '반복적으로 사용되는 가치 있는 부분'을 한 뭉치로 묶어서 '어떤 입력값을 주었을 때 어떤 결과값을 돌려준다'라는 식의 함수로 작성하는 것이 현명하다.


- def는 함수를 만들 때 사용하는 예약어이며, 함수명은 함수를 만드는 사람이 임의로 만들 수 있다. 입력 인수는 이 함수에 입력될 값이라는 뜻이다. 입력 값이 없을 경우 생략가능하다. return은 함수의 결과값을 돌려주는 명령어로 돌려주는 값이 없는 경우 생략된다.






입력 값이 몇 개가 될지 모를 때에는?









- 입력인수에 *를 붙여주면 입력값들을 전부 모아서 튜플로 만들어 준다.

입력인수에 *를 붙여주면 몇 개가 입력될지 모를 때에도 사용할 수 있다.








함수의 결과는 언제나 하나이다.


>>> def sum_and_mul(a, b):

. . . return a+b, a*b


다음의 함수를


result = sum_and_mul(3, 4) 로 호출하면 결과값을 받는 변수가 1개 임에도 오류는 발생하지 않는다.


>> 이유는 함수의 결과는 언제나 하나이기 때문에 반환되는 값이 2개이상인 경우 튜플로 만들어 돌려주기 때문이다.









따라서 만약에 하나의 튜플값을 2개의 결과값처럼 받고 싶다면 앞에서 포스팅되었던 튜플의 형태로 여러 변수의 값을 초기화하는 형태를 사용해야한다.


[ ex ]


>>> sum, mul = sum_and_mul(3, 4)







함수는 return문을 만나는 순간 결과값을 돌려준 다음( 돌려줄 결과 값이 있다면 ) 함수를 빠져나가게 된다.

- 어떤 특별한 상황이 되면 함수를 빠져나가고자 할 때는 return을 단독으로 써서 함수를 즉시 빠져나갈 수 있다.





입력 인수에 초기값 미리 설정

- 함수의 입력 인수에 들어갈 값이 항상 변하는 것이 아닐 경우에는 이렇게 함수의 초깃값을 미리 설정해 두면 유용하다.

- 초기값 부분의 입력인수를 생략할 수 있다.


>>> def say_myself(name, old, man=True):

 print("이름 : %s" %name)

 print("나이 : %d" %old)

 if man : print("여자입니다.")

 else: print("남자입니다.")


이 경우 함수의 호출은 say_myself("Leni", 25)과 say_myself("Leni", 25, True)의 결과값이 같다.




 함수부분  의 사 항

함수의 입력 인수에 초기값을 설정할 때 주의할 것은 초깃값을 설정한 인수의 위치이다.

1. 초깃값을 설정한 인수의 위치는 항상 입력인수들 중 가장 마지막이어야한다!

= 초기값을 설정해 놓은 입력 인수 뒤에 초깃값을 설정해 놓지 않은 입력 인수는 사용할 수 없다! 초기화시키고 싶은 입력 변수들을 항상 뒤쪽에 위치시키는 것을 잊지말자!

2. 함수 안에 선언된 변수는 함수 안에서만 사용되는 '함수만의 변수'이기 때문에 밖에서는 사용하지 못한다. 즉, 함수 안에서 사용되는 변수는 함수 밖의 변수 이름드과는 전혀 상관이 없다.




함수 안에서 함수 밖의 변수를 변경하는 방법 두 가지

1. return 값을 이용하여 함수 밖의 변수에 값을 대입해준다.

2. global 명령어를 이용하기 - 함수 안에서 함수 밖의 변수를 부를 때 변수명 앞에 global를 붙여주는 것.

하지만 프로그래밍을 할 때 global 명령어는 사용하지 않는 것이 좋다. 함수는 독립적으로 존재하는 것이 좋기 때문이다. 외부 변수에 종속적인 함수는 그다지 좋은 함수가 아니다.






04-2 사용자 입력과 출력



- 사용자가 입력한 값을 어떤 변수에 대입하고 싶을 때는 어떻게 해야할까?