AST python의 표현식에서 변수 이름을 실제 값으로 바꿉니다.

아누 라그 샤르마

나는 이와 같은 변수 형태로 설명 된 표현이 있습니다

's1*3 - (s2-s1)*1'

필요에 따라 변경할 수있는 s1 및 s2 값을 지정했습니다.

python ast 모듈을 사용 하여 각각의 s1 및 s2 값 (s1 = 20, s2 = 30)을 대체하여이 표현식을 평가할 수 있습니다.

import ast
import operator as op

operators = {ast.Add: op.add, ast.Sub: op.sub, ast.Mult: op.mul,
             ast.Div: op.truediv, ast.Pow: op.pow, ast.BitXor: op.xor,
             ast.USub: op.neg}

def eval_(node):
    if isinstance(node, ast.Num): # <number>
        return node.n
    elif isinstance(node, ast.BinOp): # <left> <operator> <right>
        return operators[type(node.op)](eval_(node.left), eval_(node.right))
    elif isinstance(node, ast.UnaryOp): # <operator> <operand> e.g., -1
        return operators[type(node.op)](eval_(node.operand))
    else:
    raise TypeError(node)

>>> str1 = '20*3 - (30-20)*1'
>>> node = ast.parse(str1, mode='eval')
>>> eval_(node.body)
50

변수를 실제 값으로 바꿀 필요없이이 식을 어떻게 평가해야합니까?

감사

Kasravnd

eval기능 을 사용할 수 있습니다 . 그러나 eval문자열을 실행하기 때문에 사용에주의해야합니다 . 신뢰할 수없는 입력에서 평가할 문자열을 허용하면 매우 위험 할 수 있습니다. 예를 들어 평가되는 문자열이 "os.system('rm -rf /')"? 실제로 컴퓨터의 모든 파일을 삭제하기 시작합니다.

>>> eval('20*3 - (30-20)*1')
50 

더 나은 솔루션으로 파이썬의 내부 컴파일러로 방정식을 구문 분석 할 수 있습니다 .

>>> s1=20
>>> s2=30
>>> eq='s1*3 - (s2-s1)*1'
>>> compiler.parse( eq )
Module(None, Stmt([Discard(Sub((Mul((Name('s1'), Const(3))), Mul((Sub((Name('s2'), Name('s1'))), Const(1))))))]))

따라서 방정식을 평가하려면 사용하는 것보다 더 안전하게 input사용 compile하고 평가할 수 있습니다 !

>>> eq='s1*3 - (s2-s1)*1'
>>> a=compile(eq,'','eval')
>>> eval(a)
50

또한 sympy기호 수학을위한 Python 라이브러리를 사용할 수 있습니다 . 코드를 이해하고 쉽게 확장 할 수 있도록 코드를 최대한 단순하게 유지하면서 완전한 기능을 갖춘 컴퓨터 대수 시스템 (CAS)이되는 것을 목표로합니다. SymPy는 전적으로 Python으로 작성되었으며 외부 라이브러리가 필요하지 않습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

수식의 변수 이름을 Regex.Replace로 바꿉니다.

분류에서Dev

파이썬은 문자열의 변수에 대한 언급을 실제 변수로 바꿉니다.

분류에서Dev

R에서 두 개의 변수와 두 개의 데이터 세트를 기반으로 값을 바꿉니다.

분류에서Dev

알 수없는 파일 형식으로 파일 이름과 마스크의 이름을 바꿉니다.

분류에서Dev

열 셀의 수식 값과 공백을 0으로 바꿉니다.

분류에서Dev

열의 모든 값을 해당 변수의 수학으로 바꿉니다.

분류에서Dev

파이썬 추상 구문 트리 (AST)에서 실제 사용자 정의 변수 이름을 얻는 방법은 무엇입니까?

분류에서Dev

pandas에서 열의 -ve 값을 NaN으로 바꿉니다.

분류에서Dev

Python, 이진 표현을 실제 이진 값으로 변환

분류에서Dev

sympy에서 표현식의 AST 실행

분류에서Dev

값을 해당 열의 이름으로 바꿉니다.

분류에서Dev

4 개의 변수 값을 jquery 또는 javascript로 바꿉니다.

분류에서Dev

jQuery는 복제 div의 선택기 이름을 자동으로 바꿉니다.

분류에서Dev

n * expression을 표현식의 n 배로 바꿉니다.

분류에서Dev

PySpark는 개수 임계 값 미만의 값을 값으로 바꿉니다.

분류에서Dev

파일 이름의 특수 문자 이름을 밑줄로 바꿉니다.

분류에서Dev

값 목록을 pandas df의 임의 값으로 이름을 바꿉니다.

분류에서Dev

현재 행에있는 다른 열의 매개 변수를 기반으로 한 표현식에서 값이 다른 모든 행의 열 업데이트

분류에서Dev

c = 문자 수에 따라 열의 값을 바꿉니다.

분류에서Dev

연속 실행에서 중복 된 값을 공백으로 바꿉니다.

분류에서Dev

fastapi의 응답 헤더에서 서버 이름을 가짜 서버 이름으로 바꿉니다.

분류에서Dev

zip 파일에서 추출 된 파일의 이름을 zip 파일 자체의 이름으로 바꿉니다.

분류에서Dev

한 파일 (.properties)의 매개 변수 값을 다른 파일 (.json)의 값에서 바꿉니다.

분류에서Dev

선행 값에 따라 일련의 값을 그룹으로 바꿉니다.

분류에서Dev

첫 번째 xml 태그의 첫 번째 발생을 환경 변수에있는 다른 태그 값으로 바꿉니다.

분류에서Dev

JSON 값을 Python에서 다른 JSON 파일의 해당 값으로 바꿉니다.

분류에서Dev

변수 이름을 string.replace (regex, value)로 바꿉니다.

분류에서Dev

angularjs는 변수에서 표현식을 실행합니다.

분류에서Dev

OneDrive는 자동으로 폴더 이름을 바꿉니다. 내 컴퓨터의 로컬 파일에 액세스 할 수 없습니다.

Related 관련 기사

  1. 1

    수식의 변수 이름을 Regex.Replace로 바꿉니다.

  2. 2

    파이썬은 문자열의 변수에 대한 언급을 실제 변수로 바꿉니다.

  3. 3

    R에서 두 개의 변수와 두 개의 데이터 세트를 기반으로 값을 바꿉니다.

  4. 4

    알 수없는 파일 형식으로 파일 이름과 마스크의 이름을 바꿉니다.

  5. 5

    열 셀의 수식 값과 공백을 0으로 바꿉니다.

  6. 6

    열의 모든 값을 해당 변수의 수학으로 바꿉니다.

  7. 7

    파이썬 추상 구문 트리 (AST)에서 실제 사용자 정의 변수 이름을 얻는 방법은 무엇입니까?

  8. 8

    pandas에서 열의 -ve 값을 NaN으로 바꿉니다.

  9. 9

    Python, 이진 표현을 실제 이진 값으로 변환

  10. 10

    sympy에서 표현식의 AST 실행

  11. 11

    값을 해당 열의 이름으로 바꿉니다.

  12. 12

    4 개의 변수 값을 jquery 또는 javascript로 바꿉니다.

  13. 13

    jQuery는 복제 div의 선택기 이름을 자동으로 바꿉니다.

  14. 14

    n * expression을 표현식의 n 배로 바꿉니다.

  15. 15

    PySpark는 개수 임계 값 미만의 값을 값으로 바꿉니다.

  16. 16

    파일 이름의 특수 문자 이름을 밑줄로 바꿉니다.

  17. 17

    값 목록을 pandas df의 임의 값으로 이름을 바꿉니다.

  18. 18

    현재 행에있는 다른 열의 매개 변수를 기반으로 한 표현식에서 값이 다른 모든 행의 열 업데이트

  19. 19

    c = 문자 수에 따라 열의 값을 바꿉니다.

  20. 20

    연속 실행에서 중복 된 값을 공백으로 바꿉니다.

  21. 21

    fastapi의 응답 헤더에서 서버 이름을 가짜 서버 이름으로 바꿉니다.

  22. 22

    zip 파일에서 추출 된 파일의 이름을 zip 파일 자체의 이름으로 바꿉니다.

  23. 23

    한 파일 (.properties)의 매개 변수 값을 다른 파일 (.json)의 값에서 바꿉니다.

  24. 24

    선행 값에 따라 일련의 값을 그룹으로 바꿉니다.

  25. 25

    첫 번째 xml 태그의 첫 번째 발생을 환경 변수에있는 다른 태그 값으로 바꿉니다.

  26. 26

    JSON 값을 Python에서 다른 JSON 파일의 해당 값으로 바꿉니다.

  27. 27

    변수 이름을 string.replace (regex, value)로 바꿉니다.

  28. 28

    angularjs는 변수에서 표현식을 실행합니다.

  29. 29

    OneDrive는 자동으로 폴더 이름을 바꿉니다. 내 컴퓨터의 로컬 파일에 액세스 할 수 없습니다.

뜨겁다태그

보관