문자열을 변수명으로 변환
https://www.delftstack.com/ko/howto/python/python-string-to-variable-name/
locals 와 global의 현재 namespace (전역, 지역, builtin)을 딕셔너리(dict)형식으로 반환.
locals()가 실행되어지는 함수내의 지역 namespace 들을 정리
globals는 전역, 지역, builtin 정보 모두 dict 형태
globals() locals()
globals()
현재 전역 기호 테이블의 사전을 반환합니다.
전역 심볼테이블은 globals()
함수를 사용하여 액세스 할 수있는 프로그램의 전역 범위와 관련된 모든 정보를 저장합니다.
여기서 가장 먼저하는 일은input()
함수를 사용하여 사용자로부터 입력을 받고 그 안에Enter a string for a variable name:
문자열을 전달하는 것입니다. 그런 다음 사용자가 입력 할 값이 무엇이든 해당 값은user_input
변수에 저장됩니다.
여기서는 사용자가user_input
에 저장 될 문자열 값으로apple
을 입력 할 것으로 예상합니다. 사용자가apple
이외의 값을 입력하면NameError: name 'variable' is not defined
오류가 발생합니다. apple
의 값도 인쇄 한 다음 나중에 코드에서 유형을 확인하기 때문입니다.
사용자가 올바른 값을 입력 한 경우globals()
를 사용하여 전역 사전을 수정하여 전역 사전을 수정하고apple
변수에 값을 할당 할 수 있습니다. 여기서는apple
변수에50
을 할당했습니다
locals()
현재 지역 기호 테이블의 사전을 반환합니다.
locals()
함수를 사용하여 로컬 기호 테이블에 액세스 할 수 있습니다. locals()
함수는globals()
함수와 거의 동일한 방식으로 작동합니다.
유일한 차이점은locals()
는 로컬 심볼 테이블에 액세스 할 수 있고, globals()
는 글로벌 심볼 테이블에 액세스하여 사전을 반환 할 수 있다는 것입니다.
이 코드는globals()
와 동일한 방식으로 작동합니다. 유일한 차이점은 여기서locals()
함수를 사용했다는 것입니다
exec()
를 사용
exec()
함수는 Python 프로그램을 동적으로 실행하는 데 사용됩니다.
문자열 값 Elon
을 저장하는name
변수가 있습니다.
exec()
함수 내에는 각각 문자열 값과 10 진수 값에 대한 자리 표시 자로 사용되는%s
및%d
가 있습니다. 이는 할당 연산자=
의 도움으로 문자열에 정수 값을 할당한다는 것을 의미합니다. %s
및%d
는 모두 따옴표=
로 묶여 있습니다. 그런 다음 내부에 두 가지가있는 괄호가 있습니다. 첫 번째는 생성 한 변수, 즉Elon
값을 포함하는name
이고 두 번째는 정수100
입니다.
여기서name
변수 대신 해당 변수 내의 값이 대체됩니다. 정수100
이Elon
에 할당됩니다. Elon
은 변수 이름이되며이를 인쇄하면100
이 출력으로 표시됩니다.
eval()
col1, col2, col3 …. col999 의 변수값을 출력할려면,
eval() 함수을 활용 (매개변수로 받은 expression (=식)을 문자열로 받아서, 실행)
eval()함수는 그 자체로 취약점이 될 수 있기 때문에 주의해서 사용해야 함