이것저것 기록

[python] exec()을 사용하여 동적 코드 실행하기 본문

코린이/코딩 기초 & 알고리즘 공부

[python] exec()을 사용하여 동적 코드 실행하기

anweh 2021. 5. 1. 16:57

파이썬에는 문자열 값을 변수 이름으로 변환할 수 있는 방법 중 exec()이 있다. 

나는 이 내장함수를 변수명을 굳이 assign해서 값을 할당하기에는 한번 쓰고 버려질(?) 변수에 사용하는 편이다. 

또한 변수 특정 조건을 만족하는 변수명이 생성되었을 때 동적으로 함수를 적용하고 싶을 때 사용한다. 

 

 

 

사용법은 간단하다.

임의로 작성한 다음 코드를 살펴보자. 

 

name_ls = ['Mat', 'David', 'Sam', 'Christina', 'Alex', 'Hiland', 'Maddy']
age_dict = {'Mat':10, 'David':15, 'Sam':16, 'Christina':20, 'Alex':17, 'Hiland':5, 'Maddy':9}


logic_age = """ 
age = age_dict[cur_name]
"""


adult_dict = dict()
for i in range(len(name_ls)):
    cur_name = name_ls[i]
    exec(logic_age)
    if age > 19:
        exec('adult_dict[cur_name]' + '=' + 'age')

 

 

name_ls에는 고객의 이름이 저장되어 있고, age_dict는 고객의 이름을 key, 나이를 value로 갖는 딕셔너리이다. 

나는 name_ls를 돌면서 19살이 넘은 고객만 따로 추출하여 adult_dict()라는 딕셔너리에 이름:나이 를 저장해주려고 한다. 

 

1. cur_name에는 i번째 고객이름이 들어온다. 

 

2. logic_age를 동적 실행한다. (사실 굳이 동적 실행할 필요 없지만, 예시를 위해 굳이 이렇게 씀) 

- logic_age = """               """"  << 이렇게 문자열로 코드를 막 작성하고 이 변수를 exec( ) 안에 넣어 사용하면 된다. 

- 여기서 logic_age를 통해 age라는 temporary 변수가 생성된 것이다. 

 

3. age의 값이 19가 넘으면 다음 exec( ) 을 실행한다. 

- exec( ) 사용시 주의해야 할 점은 string으로 넣어줘야한다는 점이다. 

 

Comments