작성
·
596
2
안녕하세요. 우선 양질의 강의에 감사인사부터 드립니다. 다름이 아니라 파이썬 데코레이터 함수에 관해 2가지만 여쭈어 보겠습니다.
1. 위 코드 중 38,39번 셀이랑 40,41번 셀 차이점이 print() 여부인데, print()를 해주면 None결과값이 생기는 이유가 무엇때문인건가요!?
2. 위 코드에서 closure함수 부분에서
return func(digit1, digit2) 라고 했을 때랑 return을 빼버린 func(digit1, digit2) 랑 결과물은 같게 나오는데, return 존재 여부가 나중에 어떤 영향을 끼치는 건가요..!?
두 개 모두 사소한 질문일 수 있는데 궁금해서요..!
답변 4
0
0
저도 이부분이 헷갈려서 여러번 교제를 읽어 보았습니다.
devide_func 함수의 리턴값이 없어서 동일한 결과를 가져오는 것처럼 보입니다. 만약에 devide_func 를 수정해서 리턴값을 가지게 하면 inner_func 에서 리턴을 할때와 안할때의 차이가 발생합니다. 그래서 일반적으로 return 을 넣어두면 2가지의 경우를 모두 처리가능해서 일반적인 데코레이터 만들때 return을 넣는것으로 이해했습니다.
연습문제 중에 type_checker 데코레이터 만들기 에서 inner 함수의 리턴을 빼면 정상입력시 결과값이 출력되지 않습니다. 저는 이부분을 보시면서 감이 조금 왔습니다.
저는 이렇게 이해했는데, 틀렸다면 댓글 부탁드립니다.
0
감사합니다! 첫 번째 질문은 이해가 된 것 같은데 혹시 두 번째 질문답변 중에서 "return func(digit1, digit2) 은 결국 return 이라고 쓴 셈이나 동일하고요." 이 문장이 잘 이해가 가지 않는데 이 뜻이...
#outer_func은 제외하고 작성했습니다
def inner_func(digit1, digit2):
if digit2 == 0:
print('0으로나누어질 수 없습니다')
return
return func(digit1, digit2)
위 코드랑
def inner_func(digit1, digit2):
if digit2 == 0:
print('0으로나누어질 수 없습니다')
return
func(digit1, digit2)
이거랑 결국 동일하다는 말씀이신건가요..!? ㅜㅜ 어렵네요..흑
0
안녕하세요. 우선 양질의 강의라고 생각해주셔서 정말 감사합니다. 백엔드 강의가 실제 장기적으로 도움이 될 수 있도록 꾸민 측면이 어떻게 느껴지실까 조금 걱정이 있었는데, 다행이네요.
1번에서는
40번과 41번에서 2.0 이나, 0으로 나누어질 순 없습니다. 이 부분은 함수 안에 있는 print 문을 통해 출력이 되는 것이고요.
None 은 divide_func() 함수의 리턴값을 출력한 것입니다. 그런데, 데코레이터에는
return 만 있고, 별 값을 리턴안하거나, (digit2 가 0인 경우), 아예 return 구문이 없죠. 이 때에는 해당 함수의 리턴값이 None 입니다.
print(divide(4,2)) 와 같이 쓸 경우, 결국 divide() 함수가 다 실행되고 그 결과, 즉 리턴값을 print 하라는 명령인 셈이 되기 때문에, 해당 함수의 리턴값인 None 이 출력되는 것입니다.
2번에서는
return 을 명시적으로 해주거나, 명시적으로 안해주더라도, 함수가 끝나면 일반적으로 프로그래밍 언어는 리턴 처리를 합니다. 그런데 지금 케이스에서는 func(digit1, digit2) <-- 이 함수 자체가 리턴값이 없죠. 그렇다면,
return func(digit1, digit2) 은 결국 return 이라고 쓴 셈이나 동일하고요. 이 경우는 None 이 리턴되는 것이고, return 을 안붙여도 함수가 끝났으니 파이썬이 리턴 처리를 하면서 None 을 리턴하니, 결국 둘다 None 이 리턴되는 것입니다.
감사합니다.