2017-12-08 10 views
0

이의이파이썬 기본 (변경 가능) 파라미터 초기화 스타일

def make_sandwich(ingredients=['ham', 'ham', 'bacon', 'ham']): 
    print("Making a sandwich with ", ingredients) 

그러나 ['ham', 'ham', 'bacon', 'ham']의 기본값 ingredients의 목록을받는 함수 make_sandwich 보자, 우리는 사용한다 대신 다음과 같이 불변합니다 :

def make_sandwich(ingredients=None): 
    # initialized ingredients here 
    print("Making a sandwich with ", ingredients) 

그래서 여기에 질문이 있습니다. 이 작업을 수행하는 방법을 알고있는 두 가지 방법이 있습니다. 그러나 어느 것이 더 나은 방법으로 간주되는지 확실하지 않습니다.

첫 번째

:

if not ingredients: 
    ingredients = ['ham', 'ham', 'bacon', 'ham'] 

두 번째 :

ingredients = ingredients or ['ham', 'ham', 'bacon', 'ham'] 

는 개인적으로 나는 더 자주 두 번째를 사용합니다. 때로는 인수가 한 번만 사용되면 인라인으로조차 간다. 예 :

print("Making a sandwich with ", ingredients or ['ham', 'ham', 'bacon', 'ham'])

다른 이상을 선호하는 솔리드 이유가 있나요?

답변

2

실제로 이들 중 누구도 올바른 방법이 아닙니다. 빈 재료 목록을 전달하려면 어떻게해야합니까?

더 나은 솔루션

if ingredients is None: 
    ingredients = ['ham', 'ham', 'bacon', 'ham'] 
+0

좋은 점! 내 다른 솔루션은 같은 이유로 고통 받고 있다고 생각합니다. – Uduse

+0

사실, 그들은 똑같은 행동을하고 단지 선호의 문제 일뿐입니다. 귀하의 질문에 가장 잘 부합한다고 판단되면 대답을 선택하는 것을 잊지 마십시오. –

1

개인적인 스타일의 문제 일 것입니다. 너도 할 수있어

ingredients = ingredients if ingredients else ['ham', 'ham', 'bacon', 'ham'] 

누구가 코드를 읽을 지에 따라 달라집니다. 개인적으로 나는 두 번째로 괜찮습니다.