티스토리 뷰

IT/Python

[Python] 함수 (Function)

Dragonz 2020. 7. 8. 02:01
반응형

 

def 키워드는 함수를 정의할 때 사용한다. 아래 정의한 fib() 함수는 매개변수로 전달받은 n 까지의 피보나치 수열을 출력한다.

>>> def fib(n) :     # 전달받은 매개변수 n 까지의 피보나치 수열을 출력하는 함수
...     a, b = 0, 1
...     while a < n :
...         print(a, end=' ')
...         a, b = b, a+b
...         print()
...
>>> fib(2000)
0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987
1597

 

n 까지의 피보나치 수열을 출력

 

n 까지의 피보나치 수열을 리스트로 return 할 수도 있다.

>>> def fib2(n ):     # 매개변수 n 까지의 피보나치 수열을 리스트로 return 하는 함수
...     result = []
...     a, b = 0, 1
...     while a < n :
...         result.append(a)
...         a, b = b, a+b
...     return result
...
>>>
>>> f100 = fib2(100)
>>> f100
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

 

n 까지의 피보나치 수열을 리스트로 반환

 

정해지지 않은 개수의 인자들로 함수를 정의하는 것도 가능하다.

def ask_ok(prompt, retries=4, reminder='Please try again!'):
    while True :
        ok = input(prompt)
        if ok in ('y', 'ye', 'yes'):
            return True
        if ok in ('n', 'no', 'nop', 'nope'):
            return False
        retries = retries - 1
        if retries < 0 :
            raise ValueError('invalid user response')
        print(reminder)

위의 함수는 여러가지 방법으로 호출될 수 있다.

>>> ask_ok('정말 끝내시겠습니까?')
정말 끝내시겠습니까?
Please try again!
정말 끝내시겠습니까?
Please try again!
정말 끝내시겠습니까?
Please try again!
정말 끝내시겠습니까?
Please try again!
정말 끝내시겠습니까?
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 10, in ask_ok
ValueError: invalid user response

prompt 는 기본값이 정해지지 않았기 때문에 반드시 전달되어야 하는 매개변수이다. ask_ok('정말 끝내시겠습니까?') 로 함수를 호출하면 전달받은 문자열을 화면에 출력하고 사용자의 입력을 기다린다. 입력값이 y, ye, yes 이면 True 를 return 하고 n, no, nop, nope 이면 False 를 return 한다. 그 외의 값을 입력하면 retries 값이 1씩 차감되며 총 5번 재질문을 한다.

>>> ask_ok('파일을 덮어쓸까요?', 2)
파일을 덮어쓸까요?
Please try again!
파일을 덮어쓸까요?
Please try again!
파일을 덮어쓸까요?
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 10, in ask_ok
ValueError: invalid user response

retries 값을 매개변수로 전달할 수도 있다. 함수 호출 시 retries 에 2 를 전달하면 기본값 4가 아닌 2 가 치환되면서 총 3 번의 재질문을 한다.

>>> ask_ok('파일을 덮어쓸까요?', 2, 'yes 또는 no 를 입력하세요.')
파일을 덮어쓸까요?
yes 또는 no 를 입력하세요.
파일을 덮어쓸까요?yes
True

모든 인자를 전달할 수도 있다. prompt 변수에는 '파일을 덮어쓸까요?' 라는 문자열이, retries 변수에는 2 라는 정수형 값이, reminder 변수에는 'yes 또는 no 를 입력하세요.' 라는 문자열이 치환된다.

 

END

반응형

'IT > Python' 카테고리의 다른 글

[Python] 튜플  (0) 2020.07.14
[Python] 리스트 (더 자세하게 알아보기)  (0) 2020.07.09
[Python] 제어문 (if, for, range(), break, continue)  (0) 2020.07.02
[Python] 리스트  (0) 2020.06.30
[Python] 문자열  (0) 2020.06.30
댓글
공지사항