inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

해결된 질문

630

cookies poo

작성한 질문수 1

1

안녕하세요 선생님!

감사히 잘 듣고 있는 수강생입니다.

맨 마지막 도전과제 질문이 있어 문의드립니다.

하나의 태그에 대해서만 만드는게 아니라

나온 html 태그들을 각 함수에 할당하는 for 문으로 한번 돌려보고 싶어서... 이런식으로 했더니 err가 납니다.

def 함수 <--- 이 함수부분을 동적으로 할당할 수 있는 방법이 있을까요....?

 

print_center 라고 되어있는부분은 계속 덮어씌워지는걸 확인했습니다.

python rest-api flask

답변 2

1

잔재미코딩 DaveLee

안녕하세요. 답변 도우미입니다.

Python에서 함수 이름을 동적으로 생성하는 것은 좀 복잡할 수 있습니다. globals() 함수를 사용하여 전역 변수 및 함수 이름을 동적으로 할당하는 것이 가능하기는 하지만, 일반적인 방법은 아닙니다. 그렇지만, 여기서는 당신의 문제를 해결하기 위해 이 방법을 사용해볼 수 있겠습니다.

먼저, 코드에서 문제가 되는 부분을 수정해보겠습니다:

html_list = ['b','i','h1','h5','h6','center']

func_list = ["print_1","print_2","print_3","print_4","print_5","print_6","print_7","print_8","print_9"]

def mark_html(tag):

    def outer_wrapper(function):

        def inner_wrapper(*args, **kwargs):

            return f"<{tag}>{function(*args, **kwargs)}</{tag}>"

        return inner_wrapper

    return outer_wrapper

for tag, func_name in zip(html_list, func_list):

    @mark_html(tag)

    def generated_function(title, tag=tag):  # tag의 기본값을 설정하여 closure 문제를 해결

        return title

    globals()[func_name] = generated_function

# 예시 사용 방법:

print(print_1("Hello!"))

print(print_2("How are you?"))

 

여기서 사용한 핵심 아이디어는:

1. mark_html 데코레이터를 수정하여 원하는 태그를 입력받을 수 있게 했습니다.

2. for 루프 내에서 함수를 정의하고, 그 함수를 globals()를 사용하여 원하는 함수 이름으로 할당했습니다.

3. generated_function 함수 정의에서 tag=tag로 기본값을 설정함으로써 함수 정의 내부에서 tag 변수에 접근할 수 있게 했습니다.

이렇게 하면, 원하시는 대로 동적으로 함수를 생성하고 그 이름을 할당할 수 있습니다.

감사합니다.

0

cookies poo

오... 함수를 만들때 선언하는게 아니라 공통으로 generated_function을 미리 만들고 그걸 함수에 할당하면 되네요..!!! 감사합니다!

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

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

154

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

321

2

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

0

316

2

flask_cors설치 오류

0

618

2

부스트랩 html 다운

0

257

1

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

0

354

1

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

1

254

1

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

0

339

1

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

0

576

1

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

0

289

1

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

1

624

3

04._flask_ABTest Pycharm 에서 실행오류

0

488

1

WinError 10013 ,오류 해결 가능할까요?

0

4106

1