2014-11-29 3 views
0

파이썬에 C 코드를 다시 작성하고 있지만 막힌 것 같습니다. 이 기능은 main() 함수에서 호출파이썬과 C 언어로 변수 초기화하기

double GetArrival() 
    /* --------------------------------------------- 
    * generate the next arrival time, with rate 1/2 
    * --------------------------------------------- 
    */ 
    { 
    static double arrival = START; 

    SelectStream(0); 
    arrival += Exponential(2.0); 
    return (arrival); 
    } 

:

나는 C의 기능을 가지고있다. 호출 될 때마다 알 수 있듯이 지수에 랜덤 지수 2.0이 추가됩니다. 당신이 알아야 할 것은 임의 변수를 반환하는 사용자 정의 함수라는 것입니다.

작동해야하는 C 파일에서 ddd와상의 한 후, 다음 Python에서 "equivalent"변수 arrival이 GetArrival() 함수가 호출 될 때마다 START = 0으로 초기화된다는 것을 깨달았습니다. 이것은 어떤 이유로 함수가 호출되는 것을 제외하고는 C에서 발생하지 않습니다.

def GetArrival(): 
    arrival = START 
    SelectStream(0) 
    arrival += Exponential(2.0) 
    return arrival 

그래서 나는이 악 초기화를 생략해야한다고 생각하고 그것을해야한다. 그럴 경우, 다음과 같은 오류가 발생합니다.

UnboundLocalError: local variable 'arrival' referenced before assignment 

어느 정도 의미가 있습니다.

내 질문에 어떻게하면 0으로 초기화 할 때마다 arrival 변수를 가지지 않고도 C로 된 파이썬 코드를 작동시킬 수 있습니까?

감사합니다.

답변

0

이것은 파이썬이 정적 변수를 C와 다르게 취급하는 것과 관련이 있습니다. 파이썬에서 정적 변수를 만드는 것을 참조하십시오 (클래스가 아닌 함수의 정적 var). This stack overflow reference should be of help to you.

+3

이것은 "실행 스택"의 차이가 아닌 정적 변수 (https://en.wikipedia.org/wiki/Static_variable)에 의해 발생합니다. –

+0

감사합니다. @jonls. 그에 따라 업데이트되었습니다. – user239546