파이썬 eval()
및/또는 exec()
을 사용하여 파일이나 데이터베이스에 데이터를 쓰지 않고 프로그램 실행간에 상태를 유지할 수 있습니까? 여기에 더 구체적으로 질문이 있습니다. 숫자를 출력 한 다음 파일이나 데이터베이스에 변수를 저장하지 않고 다시 실행할 때마다 1을 계속 추가하는 프로그램을 작성하려고합니다. 최근 인터뷰에서이 질문을 받았습니다. 도움을 주시면 감사하겠습니다.Python eval() 및 exec()
답변
면책 조항 : 나는 이 아닙니다.은 이것을 권장합니다. 99.999 %의 시간이면 직렬화 가능 정보를 자체 파일에 저장하는 것이 좋습니다.
"에 데이터를 작성하지 않고 자신의 파일", 뜻, 의 "파일에 데이터를 작성하지 않고"당신이 실행되고있는 파이썬 파일을 열 수에 적절한 데이터를 다시 작성하여 경우 :
import re
x = 0
print "The value of the variable x is: {}".format(x)
with open("test.py") as file:
data = file.read()
data = re.sub(r"x = (\d+)", "x = {}".format(x+1), data)
with open("test.py", "w") as file:
file.write(data)
이제 이후의 실행마다 값이 변경됩니다.
C:\Users\Kevin\Desktop>test.py
The value of the variable x is: 0
C:\Users\Kevin\Desktop>test.py
The value of the variable x is: 1
C:\Users\Kevin\Desktop>test.py
The value of the variable x is: 2
C:\Users\Kevin\Desktop>test.py
The value of the variable x is: 3
C:\Users\Kevin\Desktop>test.py
The value of the variable x is: 4
그러나 다시, 그냥 예를 shelve
에 사용, 별도의 파일에 데이터를 유지하는 것이 바람직입니다 :
import shelve
d = shelve.open("data.dat")
if "x" not in d:
d["x"] = 0
print "The value of x is: {}".format(d["x"])
d["x"] += 1
또는 당신이 가치 있다면 아마도 JSON 인간 가독성 :
import json
try:
with open("data.dat") as file:
d = json.load(file)
except IOError: #first execution. file doesn't exist yet.
d = {"x":0}
print "The value of x is: {}".format(d["x"])
d["x"] += 1
with open("data.dat", "w") as file:
json.dump(d, file)
많은 양의 데이터가있는 경우 본격적인 데이터베이스입니다.
음 첫 번째 옵션은 면접자가 염두에 두었던 것입니다. 그것은 복잡하지만 여전히 솔루션입니다. – Stacker
이상적으로는 코드 골프 여야하지만 재미있었습니다!
요청하신대로 exec
및 eval
을 사용하는 해결책은 다음과 같습니다.
코드는 15 개 라인 긴 각각 (z=1)
는 평 파일에 추가됩니다 추가로 줄을 실행에
무엇을 인쇄하는 것은 number of lines in file now - 15
, 각 실행에 따라서 인쇄 단위입니다
initial_num_lines = 15
def get_lines_in_file():
f = open('evalexec.py', 'r')
num_lines = len(f.readlines())
return num_lines
lines = str(get_lines_in_file() - initial_num_lines)
print eval(lines+'+1')
exec_code = '''
f = open('evalexec.py', 'a')
f.write("\\nz=1")
f.close()
'''
exec(exec_code)
출력 :
>python evalexec.py
0
>python evalexec.py
1
>python evalexec.py
2
>python evalexec.py
3
아 아 좋네. 나는 이것이 내가 염두에 두었던 것에 가장 가깝다고 생각한다. – Stacker
os.utime
를 사용하여 마지막으로 수정 된 값을 추적 (정수이다) 유지하고, 그것을 각 실행을 업데이트 할 파일
stats을 사용할 수 있습니다
:
,import os
last_modified = os.stats(__file__).st_mtime
print(int(last_modified))
os.utime(__file__, (last_modified, last_modified + 1))
연속 실행 :
Petes-Mac:~ petewood$ python inc.py
1486149574
Petes-Mac:~ petewood$ python inc.py
1486149575
Petes-Mac:~ petewood$ python inc.py
1486149576
- 1. 파이썬 : eval, exec 또는 ..를 사용해야합니까?
- 2. Python : eval safe
- 3. appengine의 Python : eval() 오류
- 4. PHP Exec() 및 Python 스크립트 확장 성
- 5. Python 2에서 exec 내부에서 eval을 사용하는 방법
- 6. importlib.reload() and exec() in Python
- 7. Ghostscript exec : PHP vs Python
- 8. ASP : LinkButton 및 Eval
- 9. ASPxGridView, ITemplate 및 Eval
- 10. NavigateUrl 및 EVAL
- 11. Python eval (repr (object)) - 구문이 잘못되었습니다.
- 12. Python Eval :이 코드에 어떤 문제가 있습니까?
- 13. python mako templating에서 eval()을 사용하는 방법
- 14. Python eval() 예외 처리 코드 한 줄로
- 15. python eval expression에서 변수를 게으르게 평가하는 방법
- 16. Python : 값을 부동 소수점으로 강제 변환하는 eval()?
- 17. eval 함수는 Python 2.7에서 잘 작동하지 않습니다.
- 18. 런타임시 특정 클래스 변수를 대상으로하는 python eval
- 19. python - py-expression-eval - numpy ndarray 전달
- 20. PHP to Python 서버 페이지, 세션 및 EXEC
- 21. Python : sympy.sympify를 사용하여 수학 함수에서 안전한 eval() 수행
- 22. python exec acess를 하나의 디렉토리로 제한
- 23. 파이프 제어 기능이있는 Python exec 명령
- 24. 테이블 변수 및 exec
- 25. grep 및 exec 문제
- 26. HHVM 및 PHP exec()
- 27. PHP Exec 및 at
- 28. Imagemagick exec 및 convert
- 29. Exec 및 가변 범위
- 30. PHP exec 및 OSASCRIPT?
번호는 왜 그 당신을 도울 것이라고 생각? 'eval'과'exec'는 그들과 연관된 마술적인 영구 저장소를 가지고 있지 않습니다. – user2357112
인터뷰 담당자가 구체적으로 eval과 exec를 사용하여이 작업을 수행하는 방법을 묻지 않았습니까? 아니면 일반적으로 상태를 유지하는 방법을 묻지 않았으며 eval/exec를 직접 사용하는 아이디어가 떠 올랐습니까? – Kevin
그것은 인터뷰에서 나에게 제공되는 힌트의 일부입니다. 외관상으로는 eval는 코드를 스스로 수정하는 데 어떻게 든 사용될 수 있습니다. – Stacker