在python和c中初始化变量

Initialization of variable in python and C

本问题已经有最佳答案,请猛点这里访问。

我正在将C代码重写为python,但它似乎卡住了。

我在C中有函数:

1
2
3
4
5
6
7
8
9
10
11
12
  double GetArrival()
  /* ---------------------------------------------
  * generate the next arrival time, with rate 1/2
  * ---------------------------------------------
  */
  {
  static double arrival = START;

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

此函数是从main()函数调用的。你每次打电话都能看到,到达率增加了2.0的指数随机率。你只需要知道它是一个自定义函数,返回一个随机变量。

在咨询了DDD关于C文件的工作原理之后,我意识到在下面的python"equivalent"中,每次调用函数getarrival()时,变量arrival都被初始化为start=0。由于某种原因,这不会在C中发生,除非第一次调用函数。

1
2
3
4
5
def GetArrival():
     arrival = START
     SelectStream(0)
     arrival += Exponential(2.0)
     return arrival

所以我认为我应该省略这个邪恶的初始化,这应该做到。没有,因为在这种情况下,我得到以下错误:

1
UnboundLocalError: local variable 'arrival' referenced before assignment

这有点道理。

所以我的问题是,如何使python代码像C中的代码一样工作,而不需要每次都将变量arrival初始化为零?

谢谢。


这与Python对待静态变量与C的不同有关。尝试在python中生成静态变量(函数中的静态变量,而不是类)。这个堆栈溢出引用应该对您有所帮助。