2014-07-06 6 views
0

Sage를 Python으로 가져 오기위한 Sage 지침에 따라 Python 내에서 간단한 "integrate (x, x)"문을 평가하려고했습니다. 내가 명령 줄에서 실행하려고하면 내가 던진이 오류를 얻을Python 스크립트 내에서 현자 코드를 올바르게 평가하는 방법

#!/usr/bin/env sage -python 

from sage.all import * 
def main(): 
    integrate(x,x) 
    pass 
main() 

: 여기 내 전체 스크립트의

NameError: global name 'x' is not defined 

내가 global x, 스크립트에 var(x)를 추가 해봤를 교체 시도 integrate(x,x)sage.integrate(x,x)으로 설정했는데 작동하지 않는 것처럼 보였습니다. 항상 오류가 발생합니다.

내가 사용 명령은 ./sage -python /Applications/path_to/script.py

내가 잘못 여기서 뭘하는지 이해할 수없는 것입니다.

편집 : 내가 "수입 한"현자와 관련이 있다는 느낌이 들었습니다. 나는 폴더가 있고, 폴더 1이라고 부르고, 폴더 1은 "sage"폴더와 "script.py"입니다.

"sage"를 입력하기 때문에 이것을 생각하고 있습니다. 자동 완성 옵션을 불러 오지 않습니다.

+0

왜 다른 기능의 메인에 있습니까? –

+0

나는 이것이 무슨 뜻인지 이해하지 못합니다. def main() :과 main() 줄을 제거하려고 시도했지만 아무 것도 변경하지 않았습니다. –

+0

그냥 main() 함수에 코드를 넣는 것이 관습이라고 생각했습니다. 나는 파이썬 전에 자바를 배웠고 코드는 main() 없이는 실행되지 않았다. –

답변

2

이름이 x 인 경우 import sage.all으로 가져올 수 없습니다. 변수 x를 정의하려면, 당신은 너무,

x = SR.var('x') 
integrate(x,x) 

두 번째 예는 자동적으로 전역 범위에 이름 x를 주입하지 않으며, 따라서

var('x') 
integrate(x,x) 

또는 더 나은처럼 var 문을 실행해야 그것을 명시 적으로 변수에 지정해야합니다. 당신이 당신의 파이썬 파일에서 이러한 라인을 넣어 경우, integrate(x,x)이 작동

from sage.all import * 
from sage.calculus.predefined import x 

:

+0

당신의 답을 정확하게 표시 하겠지만 궁금합니다. 그래서 파이썬 안에서 보통의 현자 코드를 평가할 방법이 없습니까? sage 내에서 integrate (x, x)가 x를 변수로 선언하지 않고 작동하기 때문에 –

+0

일반 샐비어 코드는 파이썬 코드가 아닙니다. 예를 들어'(1..2)'는 유효한 sage 문법이지만 python에서는 문법 오류입니다. 그래서, 파이썬에서는 "보통의 Sage 코드"를 실행하는 것은 의미가 없습니다. 현자 코드를 실행하려면'.sage' 파일에 작성하십시오. –

+0

좋은 지적, 루카 - 그리고 이것이 표준 세이지 세션에있는 전역 네임 스페이스로 가져올 수없는 유일한 것 중 하나라고 생각합니다. 다른 어떤 생각을 할 수 있습니까? – kcrisman

1

여기 세이지 (파일 src/sage/all_cmdline.py 참조) 않는거야. (사실, sage.calculus.predefined 그냥 sage.symbolic.ring에서 var 기능을 사용하여 x 정의한다. 다른 대답 제안이 그냥 SR.var 호출하지만, 당신이 원하는 경우에 정말 현자의 초기화 과정을 모방,이 두 라인은 당신이 필요합니다.)