파이썬 기준 : 동적 실행 파이썬 코드

용지 Zhongjue이 연습은 필수적입니다 알고 온다. ------ 루 노래 "겨울 독서 쇼 하위 유"

I. 서론

실제로, 우리는 오늘 단순히 파이썬 파이썬 코드를 실행하여 요약 있도록 유연성을 보장하기 위해, 우리는 동적으로 코드를 생성 한 후 실행해야하는 프로그램의 구현의 실제 요구를 모른다.

둘째, 사전 지식 포인트

동적으로 파이썬 스크립트를 실행하려고, 당신은 어떻게 파이썬으로 문자열이나 파일 내용을 알고 지시 사항을 식별해야합니다. 구현 코드는 동적 평가 () 및 간부 () 함수를 사용하여로드되고 실행된다.

2.1.eval () 함수

평가 () 함수는 스트링 표현식을 수행하는 데, 상기 식의 값을 반환한다. 구문은 다음과 같습니다 :

eval(expression, globals=None, locals=None)
  • 식 - 식입니다.
  • 전역 - 제공되는 경우 변수 범위, 글로벌 네임 스페이스, 그것은 사전 객체 여야합니다.
  • 주민 - 변수 범위는 로컬 이름 공간이 제공되는 경우, 어떤지도 객체가 될 수 있습니다.

참고 : 그것은 단지 하나의 연산 식 (수행 파이썬 코드 있음을 노트 평가는 과제의 어떤 형태를 지원하지 않습니다 )이 아닌 복잡한 코드 논리를, 그리고 그것을 람다 표현식과 매우 유사하다.

2.2.exec () 함수

간부 () 평가에 비해 파일 또는 문자열에 저장되어 파이썬 문을 실행, 간부는 더 복잡한 파이썬 코드를 수행 할 수 있습니다.

exec(object[, globals[, locals]])
  • 목적 : 필수 매개 변수는 파이썬 코드 요구 사항을 지정할 수를 나타냅니다. 그것은 문자열 또는 코드 개체를해야합니다. 객체가 먼저 파이썬 문 세트에 해결하고, (구문 오류가 발생하지 않는 한)를 실행하는 문자열입니다 경우. 오브젝트 코드 객체 인 경우, 그것은 단순한 실행합니다.
  • 전역 : 선택적 매개 변수는 전역 이름 공간을 나타낸다는 (글로벌 변수를 저장하기 위해), 제공되는 경우, 사전 객체 여야합니다.
  • 지역 주민들은 : 현재 로컬 네임 스페이스 (지역 변수를 저장) 나타내는 선택적 매개 변수가 제공되는 경우 어떤지도 객체가 될 수 있습니다. 이 매개 변수를 무시한다면, 그것은 전역에게 같은 값을 취할 것입니다.

간부 반환 값은 항상 없음입니다.

2.3.eval 사용 및 간부와의 차이

  • 간부 () 함수는 동적 코드 세그먼트를 실행할 수있는 반면, 평가 () 함수는, 하나의 발현 계산치.
  • 평가 () 함수는 값을 반환 할 수 있으며, 간부 () 함수가 반환하는 값은 항상 없음입니다.

셋째, 동적 상세한 파이썬 구현

다음과 같은 범주 무엇인지 동적 파이썬 간단한 목록을 수행 할 수있는 몇 가지 방법이 있습니다 :

  1. 파이썬 문 문자열의 한 줄의 구현
  2. 파이썬은 코드의 여러 줄의 문장 블록을 실행
  3. 기능을 수행합니다
  4. 동적 실행 파이썬 파일

이제 우리는 하나 그것은 하나의 사용을 설명합니다.

3.1. 자신의 문자열 표현을 수행

그 스트링 표현식이 수행되는 경우, 사용 된 평가 () 및 간부 () 함수가 될 수 있지만, 간부 () 메소드는 결과를 반환하지 않는다. 여기에 사용 된 예는 평가 () 메소드를 보여줍니다

def print_str():
    eval("print('hello world')")

def add(x, y):
    return eval("x+y")

if __name__ == "__main__":
	print_str()
    print(add(12, 56))

다음과 같이 실행 결과는 다음과 같습니다
그림 삽입 설명 여기

코드 3.2. 블록

당신이 여러 줄 문자열 식을 수행하는 경우, () 사용을 많이하지 평가, 평가는 과제의 어떤 형태를 지원하지 않습니다. 간부 () 메소드를 사용하는 그래서.

expr = """
count = 10
for index in range(count):
    print(index)
"""

def eval_code():
    eval(expr)

def exec_for():
    exec(expr)

if __name__ == "__main__":
    exec_for()
    # eval_for()  # 这样写会报错

프리젠 테이션은 다음과 같습니다 :
그림 삽입 설명 여기

3.3. 실행 기능

사실,이 차이없고, 평가 () 및 간부 () 함수가 사용될 수있는 다른 기능을 수행

def print_str():
    eval("print('hello world')")

def eval_fun():
    eval("print_str()")

def exec_fun():
    exec("print_str()")

if __name__ == "__main__":
    eval_fun()
    exec_fun()

결과는 다음과 같습니다 :
그림 삽입 설명 여기

3.4. 실행 평 파일

때때로 우리는 사실, 내장 Python2에서 파이썬 파일의 구현을 달성 할 수있는 기능한다 execfile ()가있다, 사용할 수있는 간부 인 () 함수를 사용 평 파일을 수행해야하지만, python3 제거 방법이었다. 당신은 단지 간부 인 () 파이썬 파일을 실행을 사용할 수 있습니다.

def exec_file(file_name, func_name):
    with open(file_name, "rb") as f:
        source_code = f.read()
    exec_code = compile(source_code, file_name, "exec")
    scope = {}
    exec(exec_code, scope)
    f = scope.get(func_name, None)
    f()

if __name__ == "__main__":
    exec_file(文件名, 方法名)

넷째, 실제

# -*- coding: utf-8 -*-
# 动态执行python
expr = """
count = 10
for index in range(count):
    print(index)
"""
def print_str():
    eval("print('hello world')")

def add(x, y):
    return eval("x+y")


def eval_for():
    eval(expr)


def exec_code():
    exec("print('hello world')")


def exec_for():
    exec(expr)


def eval_fun():
    eval("print_str()")


def exec_fun():
    exec("print_str()")


def exec_file(file_name, func_name):
    with open(file_name, "rb") as f:
        source_code = f.read()
    exec_code = compile(source_code, file_name, "exec")
    scope = {}
    exec(exec_code, scope)
    f = scope.get(func_name, None)
    f()


if __name__ == "__main__":
    # print_str()
    # print(add(12, 56))
    # exec_fun()
    # sum = add(12, 45)
    # print("sum=", sum)
    # exec_for()
    # eval_for()
    eval_fun()
    exec_fun()
    # 我测试的使用使用的我的博客的文件名,大家可以去我的博客里面取
    # https://blog.csdn.net/m1090760001/article/details/103329077
    # exec_file("seleniumblog.py", "open_blog")
게시 19 개 원래 기사 · 원 찬양 67 ·은 20000 +를 볼

추천

출처blog.csdn.net/m1090760001/article/details/103336519