gpt4 book ai didi

python - 如何从python中的函数递增全局变量

转载 作者:行者123 更新时间:2023-11-28 21:51:26 26 4
gpt4 key购买 nike

我被一个简单的增量函数困住了

from numpy import *
from pylab import *

## setup parameters and state variables
T = 1000 # total time to simulate (msec)
dt = 1 # simulation time step (msec)
time = arange(0, T+dt, dt) # time array
Vr = -70 #reset
El = -70

## LIF properties
Vm = zeros(len(time)) # potential (V) trace over time
Rm = 10 # resistance (mOhm)
tau_m = 10 # time constant (msec)
Vth = -40 # spike threshold (V)

## Input stimulus
I = 3.1 # input current (nA)
Vm[0] = -70

Fr = 0

## iterate over each time step
def func(Ie, Vm, Fr):
for i, t in enumerate(time):
if i == 0:
Vm[i] = -70
else:
Vm[i] = Vm[i-1] + (El- Vm[i-1] + Ie*Rm) / tau_m * dt
if Vm[i] >= Vth:
Fr += 1
Vm[i] = El
return

Ie = 3.1
func( Ie, Vm, Fr)
print Fr

## plot membrane potential trace
plot(time, Vm)
title('Leaky Integrate-and-Fire')
ylabel('Membrane Potential (mV)')
xlabel('Time (msec)')
ylim([-70,20])
show()

为什么func调用后Fr还是0?

我知道这很简单,但我在这上面浪费了很长时间

谢谢

最佳答案

你有两个不同作用域的 Fr 变量

Fr = 0

在你的功能之外,因此永远不会改变。

Fr += 1

在一个函数内并且会递增,但这是一个不同的变量。

这是解决方案(可能的解决方案之一):

def func(Ie, Vm, Fr):
for i, t in enumerate(time):
if i == 0:
Vm[i] = -70
else:
Vm[i] = Vm[i-1] + (El- Vm[i-1] + Ie*Rm) / tau_m * dt
if Vm[i] >= Vth:
Fr += 1
Vm[i] = El
return Fr

然后,就去做

Fr = func(Ie, Vm, Fr)

还有一个提示。如果您的 Fr 变量在默认情况下始终为 0,您可以这样做:

def func(Ie, Vm, Fr=0):

在定义函数时,只有当你需要不同于0的东西时才传递第三个参数。

关于python - 如何从python中的函数递增全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30260910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com