【发布时间】:2025-12-07 14:15:01
【问题描述】:
我在 python 脚本中有一个函数和一些参数,但我想更改脚本,以便在从命令行调用它时,可以输入新参数。我知道我需要使用 sys 模块,但我以前没有用过太多,而且我遇到了麻烦。这是我想用命令行中 r、a、z 和 e 的参数重新创建的原始代码:
import scipy as sc
import scipy.integrate as integrate
def dCR_dt(pops, t=0):
R = pops[0]
C = pops[1]
dRdt = r * R - a * R * C
dCdt = -z * C + e * a * R * C
return sc.array([dRdt, dCdt])
r = 1
a = 0.1
z = 1.5
e = 0.75
t = sc.linspace(0, 15, 1000)
R0 = 10
C0 = 5
RC0 = sc.array([R0, C0])
pops, infodict = integrate.odeint(dCR_dt, RC0, t, full_output = True)
这是我迄今为止尝试做的:
import scipy as sc
import scipy.integrate as integrate
import sys
def main(r, a, z, e):
def dCR_dt(pops, t=0):
R = pops[0]
C = pops[1]
dRdt = r * R - a * R * C
dCdt = -z * C + e * a * R * C
return sc.array([dRdt, dCdt])
t = sc.linspace(0, 15, 1000)
R0 = 10
C0 = 5
RC0 = sc.array([R0, C0])
pops, infodict = integrate.odeint(dCR_dt, RC0, t, full_output = True)
if (__name__ == "__main__"):
status = main(sys.argv)
sys.exit(status)
当我尝试在命令行中使用 4 个新参数运行它时,出现以下错误:
Traceback(最近一次调用最后一次): 文件“practicesys.py”,第 31 行,在 流行音乐,infodict = 集成.odeint(dCR_dt,RC0,t,full_output = True) NameError: 名称 'dCR_dt' 未定义
我是编码新手,想了解更多关于如何使用 sys 模块来修改 scipts。任何帮助深表感谢!谢谢你,我希望大家周末愉快:)
【问题讨论】:
-
未定义名称问题与问题无关。您还需要将
t = ...到pops, infodict = ...的代码放在main()下。 IE。缩进这个代码块。此外,您需要像这样调用 main:status = main(*sys.argv)。如果您的main()接受可变数量的参数,那也会更好。否则,如果没有提供四个参数,它会崩溃。说def main(*args)。请参阅*.com/q/36901/2311167 了解更多信息。
标签: python arguments command-line-arguments sys