inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] 처음하는 파이썬 백엔드와 웹기술 입문 (파이썬 중급, flask[플라스크] 로 이해하는 백엔드 및 웹기술 기본) [풀스택 Part1-1]

flask 깊은 이해를 위한 파이썬 중급 문법: 파이썬 데코레이터1

python 데코레이터 질문입니다!

654

밑바닥개발자

작성한 질문수 77

2

안녕하세요. 우선 양질의 강의에 감사인사부터 드립니다. 다름이 아니라 파이썬 데코레이터 함수에 관해 2가지만 여쭈어 보겠습니다.

1. 위 코드 중 38,39번 셀이랑 40,41번 셀 차이점이 print() 여부인데, print()를 해주면 None결과값이 생기는 이유가 무엇때문인건가요!? 

2. 위 코드에서 closure함수 부분에서 

return func(digit1, digit2) 라고 했을 때랑 return을 빼버린 func(digit1, digit2) 랑 결과물은 같게 나오는데, return 존재 여부가 나중에 어떤 영향을 끼치는 건가요..!? 

두 개 모두 사소한 질문일 수 있는데 궁금해서요..! 

python rest-api flask

답변 4

0

밑바닥개발자

와우 감사합니다! MIKE님 덕에 이해가 됬네요! 어찌됬건 return을 사용하는 것이 좋겠네요! 감사합니다 ~ :)

0

MIKE.aeon

저도 이부분이 헷갈려서 여러번 교제를 읽어 보았습니다. 

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

잔재미코딩 DaveLee

안녕하세요. 우선 양질의 강의라고 생각해주셔서 정말 감사합니다. 백엔드 강의가 실제 장기적으로 도움이 될 수 있도록 꾸민 측면이 어떻게 느껴지실까 조금 걱정이 있었는데, 다행이네요.

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 이 리턴되는 것입니다.

감사합니다.

강의 자료 어디서 다운받나요? 없는데요..

0

150

1

강의 영상은 안나오고 소리만 나옵니다.

0

177

1

섹션 6 인증 failed 질문

0

153

1

섹션 8 flask 다양한 기능: 다양한 데코레이터 before_first_request 문의

0

358

3

192.168.0.12:8085??

0

155

1

04_flask_ABTest에서 blog_abtest.py 실행 시 오류입니다.

0

171

1

수업내용 질문 건

0

186

1

brew로 mysql 설치 후 서버 실행할 때, 터미널에서 anaconda bin 참조하는 문제

0

663

2

crossorigin 프로퍼티에 대해서 질문드립니다.

0

288

1

강의자료 다운로드 문의드립니다.

1

267

1

갑자기 웹 서버 띄울때 이상하게 나옵니다

0

313

1

가장빠른 Vue와 flask, 그리고 REST API 1 강의 질문입니다. (2)

0

345

1

가장빠른 Vue와 flask, 그리고 REST API 1 강의 질문입니다.

0

322

2

Fast api 추가 강좌 개설여부 질문드립니다!.

0

316

2

flask_cors설치 오류

0

618

2

부스트랩 html 다운

0

257

1

혹시 강의자료 공유가 가능한가요?

0

354

1

소스코드는 어디에 있을까요??

1

254

1

안녕하세요 몇가지 질문이 있습니다.

0

339

1

동적함수생성 질문드립니다.

1

631

2

(강의명) flask 로 Rest API 구현과 테스트 실행 : 오류 문의

0

576

1

백엔드 데코레이터 2 강의에 도전 문제 질문드립니다

0

289

1

몽고 DB 공식홈페이지 403 접속 에러 발생합니다.

1

624

3

04._flask_ABTest Pycharm 에서 실행오류

0

490

1