setattr ()을 사용하여 문자열을 변수로 변환

브랜든 H. 고메스

입력 방정식과 입력 변수를 사용하여 합계를 취하는 sigsum () 함수를 만들고 있습니다. 지금까지 내가 가진 내용은 다음과 같습니다.

def sigsum(eqn, index, lower=0, upper=None, step=1):

    if type(step) is not int:
        raise TypeError('step must be an integer')
    elif step < 1:
        raise ValueError('step must be greater than or equal to 1')

    if upper is None:
        upper = 1280000

    if lower is None:
        lower = -1280000

    if (upper - lower) % step:
        upper -= (upper - lower) % step

    index = lower
    total = 0
    while True:
        total += eqn
        if index == upper:
            break
        index += step

    return total

기능 사용 :

print(sigsum('1/(i+5)','i'))
>>> 12.5563

내 현재 문제는 'eqn'과 'index'를 함수 로컬 네임 스페이스 내에 존재하는 변수로 변환하는 것입니다. exec를 사용하는 것은 좋은 생각이 아니며 아마도 setattr ()이 작동 할 수 있다고 들었습니다. 누구든지 나를 도울 수 있습니까? 감사.

휴 보스 웰

들어 eqn나는 람다 함수를 사용하는 것이 좋습니다 :

eqn = lambda i: 1 / (i + 5)

다음 index은 그냥 "함수에 전달 된 변수"이기 때문에, 필요하지 않습니다 (이름이 필요하지 않습니다).

그러면 당신의 기능은

def integrate(fn, start = 0, end = 128000, step = 1):
    """
    Return a stepwise approximation of
      the integral of fn from start to end
    """
    num_steps = (end - start) // step
    if num_steps < 0:
        raise ValueError("bad step value")
    else:
        return sum(fn(start + k*step) for k in range(num_steps))

그리고 당신은 그것을 실행할 수 있습니다

res = step_integrate(eqn)   # => 10.253703030104417

여기에는 많은 단계가 있으며 많은 단계가 매우 적은 수를 포함합니다. 반올림 오류는 주요 문제가 될 수 있습니다. 정확도가 중요한 경우 수동으로 적분을 유도 할 수 있습니다.

from math import log

eqn          = lambda i: 1 / (i + 5)
eqn.integral = lambda i: log(i + 5)

def integrate(fn, start = 0, end = 128000, step = 1):
    """
    Return the integral of fn from start to end

    If fn.integral is defined, used it;
    otherwise do a stepwise approximation
    """
    if hasattr(fn, "integral"):
        return fn.integral(end) - fn.integral(start)
    else:
        num_steps = (end - start) // step
        if num_steps < 0:
            raise ValueError("bad step value")
        else:
            return sum(fn(start + k*step) for k in range(num_steps))

다시 실행되는

res = step_integrate(eqn)   # => 10.150386692204735

(단계적 근사는 약 1 % 너무 높았습니다.)

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

switch 문을 사용하여 난수를 문자열로 변환

분류에서Dev

사전을 사용하여 문자열을 문자로 변환

분류에서Dev

함수를 사용하여 문자열을 튜플로 변환

분류에서Dev

함수를 사용하여 문자열을 튜플로 변환

분류에서Dev

cellfun을 사용하여 문자열을 숫자로 변환

분류에서Dev

형식을 사용하여 문자열을 숫자로 변환

분류에서Dev

특수 문자를 사용하여 문자열을 유니 코드로 변환

분류에서Dev

R을 사용하여 문자열을 날짜로 변환

분류에서Dev

리턴을 사용하여 double을 문자열로 변환

분류에서Dev

SimpleDateFormat을 사용하여 문자열을 날짜로 변환

분류에서Dev

형식을 사용하여 문자열을 int로 변환

분류에서Dev

strftime을 사용하여 문자열을 datetime으로 변환

분류에서Dev

점을 사용하여 문자열을 double로 변환

분류에서Dev

JavaScript를 사용하여 10 진수 문자열을 숫자로 수동 변환

분류에서Dev

laravel을 사용하여 배열에서 문자열로 변환

분류에서Dev

jq를 사용하여 배열을 문자열로 변환

분류에서Dev

키를 사용하여 문자열을 배열로 변환

분류에서Dev

map ()을 사용하여 정수 목록을 문자열로 변환

분류에서Dev

Python을 사용하여 문자열을 부동 소수점으로 변환

분류에서Dev

Double을 지수 표기법을 사용하여 문자열로 변환

분류에서Dev

자바. 스캐너를 사용하여 정수 값을 문자열로 변환

분류에서Dev

문자열을 사용하여 2 진수를 8 진수로 변환

분류에서Dev

C #을 사용하여 십진수를 문자열로 변환하는 방법

분류에서Dev

Spark / scala를 사용하여 문자열을 DataFrame으로 변환

분류에서Dev

Java를 사용하여 문자열을 json 객체로 변환

분류에서Dev

태그를 사용하여 xml을 문자열 PHP로 변환

분류에서Dev

태그를 사용하여 xml을 문자열 PHP로 변환

분류에서Dev

Java를 사용하여 문자열을 JSONArray로 변환

분류에서Dev

Javascript를 사용하여 문자열을 JSON으로 변환

Related 관련 기사

  1. 1

    switch 문을 사용하여 난수를 문자열로 변환

  2. 2

    사전을 사용하여 문자열을 문자로 변환

  3. 3

    함수를 사용하여 문자열을 튜플로 변환

  4. 4

    함수를 사용하여 문자열을 튜플로 변환

  5. 5

    cellfun을 사용하여 문자열을 숫자로 변환

  6. 6

    형식을 사용하여 문자열을 숫자로 변환

  7. 7

    특수 문자를 사용하여 문자열을 유니 코드로 변환

  8. 8

    R을 사용하여 문자열을 날짜로 변환

  9. 9

    리턴을 사용하여 double을 문자열로 변환

  10. 10

    SimpleDateFormat을 사용하여 문자열을 날짜로 변환

  11. 11

    형식을 사용하여 문자열을 int로 변환

  12. 12

    strftime을 사용하여 문자열을 datetime으로 변환

  13. 13

    점을 사용하여 문자열을 double로 변환

  14. 14

    JavaScript를 사용하여 10 진수 문자열을 숫자로 수동 변환

  15. 15

    laravel을 사용하여 배열에서 문자열로 변환

  16. 16

    jq를 사용하여 배열을 문자열로 변환

  17. 17

    키를 사용하여 문자열을 배열로 변환

  18. 18

    map ()을 사용하여 정수 목록을 문자열로 변환

  19. 19

    Python을 사용하여 문자열을 부동 소수점으로 변환

  20. 20

    Double을 지수 표기법을 사용하여 문자열로 변환

  21. 21

    자바. 스캐너를 사용하여 정수 값을 문자열로 변환

  22. 22

    문자열을 사용하여 2 진수를 8 진수로 변환

  23. 23

    C #을 사용하여 십진수를 문자열로 변환하는 방법

  24. 24

    Spark / scala를 사용하여 문자열을 DataFrame으로 변환

  25. 25

    Java를 사용하여 문자열을 json 객체로 변환

  26. 26

    태그를 사용하여 xml을 문자열 PHP로 변환

  27. 27

    태그를 사용하여 xml을 문자열 PHP로 변환

  28. 28

    Java를 사용하여 문자열을 JSONArray로 변환

  29. 29

    Javascript를 사용하여 문자열을 JSON으로 변환

뜨겁다태그

보관