default value

함수 인자에 기본값을 지정해 입력값이 없어도 지정된 인자 값이 나오게 할 수 있다.

def say_hello(name="Ozil"):
  print("hello", name)

say_hello() # hello, Ozil
say_hello("aresen") # hello, aresen 

default value 주의 사항

default value는 함수가 실행될 때가 아닌, 정의된 함수가 처음 평가될 때 사용된다.
실행을 여러번해도 결과값은 변하지 않는다.

 import time
 time.ctime()
'Mon Mar  5 14:57:24 2018'
 time.ctime()
'Mon Mar  5 14:57:27 2018'
 def show_time(now=time.ctime()):
    print(now)

 show_time()
Mon Mar  5 14:57:52 2018
 show_time()
Mon Mar  5 14:57:52 2018
 show_time()
Mon Mar  5 14:57:52 2018

default value를 mutable한 객체로 했을때 주의가 필요하다.
default value를 여러번 사용하게 될 경우 예상치 않은 결과가 나올 수 있다.

 def add_book(book_list=[]):
    book_list.append('파이썬 베이직')
    return book_list

 book_list=['Hello, Python', 'Head First Python']

 add_book(book_list)
['Hello, Python', 'Head First Python', '파이썬 베이직']
 add_book()
['파이썬 베이직']
 add_book()
['파이썬 베이직', '파이썬 베이직']
 add_book()
['파이썬 베이직', '파이썬 베이직', '파이썬 베이직']

인자에 값을 입력하지 않아 기본값이 누적되어 출력된다.
default value를 None으로 주고, None인 경우에만 값을 할당해 해결할 수 있다.

def add_book(book_list=None):
    if book_list is None: 
            book_list =[] # 리스트를 초기화 한다
    book_list.append('파이썬 베이직')
    return book_list

 add_book()
['파이썬 베이직']
 add_book()
['파이썬 베이직']

book_list = ['Hello, Python', 'Head First Python']

add_book(book_list)
['Hello, Python', 'Head First Python','파이썬 베이직']

본 글은 노마드 코더의 Python으로 웹 스크래퍼 만들기와 위키독스의 파이썬 기본을 갈고 닦자의 함수인자 챕터를 참고했습니다.

파이썬 - 기본을 갈고 닦자! https://wikidocs.net/16053