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 까지의 피보나치 수열을 리스트로 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]
정해지지 않은 개수의 인자들로 함수를 정의하는 것도 가능하다.
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
반응형