Python:如果在函数中声明了变量,我可以访问它吗';下一次调用函数时的s值?

Python:如果在函数中声明了变量,我可以访问它吗';下一次调用函数时的s值?,python,process,Python,Process,问题: 我正在使用Popen启动MPlayer的一个实例 相同的函数用于向声明的进程传递命令 def mp_controller(cmd,val=""): iput="" if cmd=="pos": iput="seek "+val+" 2" elif cmd=="open": mp=subprocess.Popen(["mplayer",

问题:

我正在使用Popen启动MPlayer的一个实例

相同的函数用于向声明的进程传递命令

def mp_controller(cmd,val=""):
iput=""
if cmd=="pos":
    iput="seek "+val+" 2"
elif cmd=="open":
    mp=subprocess.Popen(["mplayer","-slave","-quiet",val],stdin=subprocess.PIPE, stdout=subprocess.PIPE)
elif cmd=="adv":
    iput="seek "+val+" 0"
etc...etc...
我首先调用函数,将路径传递给视频文件和命令“open”

随后,当我传递函数时,命令“pos”跟随我希望视频前进到的秒数,我发现我得到一个错误:

UnboundLocalError: local variable 'mp' referenced before assignment
这大概是因为在函数调用之间没有维护mp变量的完整性

是否有一种声明变量的方法,以便在后续调用时可以访问该变量

我从轮询USB设备的线程调用函数,也从Tkinter小部件集调用函数(我愿意更正),使用类来定义我的mplayer控件与定义函数受到的限制相同,也就是说,我看不到任何方法可以使实例化的过程对我的程序可用

我的解决方案是编写一个单独的简单脚本并使用它

import  sys
import subprocess

if __name__ == '__main__':
  for line in sys.stdin:
    cmd=line[:1]
    if cmd=="q":
      break
    elif cmd=="o":
      mp = subprocess.Popen(["mplayer", "-slave", "-quiet", line[2:-1]], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
    else:
      mp.stdin.write(line[:-1])

唯一的问题是,我无法使用
mp.stdin.write
从第一个脚本向它发送多个命令,因此,作为临时解决方案,我正在写入FIFO文件。

添加全局关键字并在函数中定义变量。会的work@Vivs不,使用可变全局状态是一种反模式。需要了解的非常重要的一点是python没有变量声明。当变量被分配到任何名称空间中时,变量就开始存在。在任何情况下,听起来您都需要类似于C静态变量的东西。Python没有这个功能。Python中处理状态的两种常见方法是:1)显式地传递并返回您需要的函数状态;2)使用类来封装状态。乍一看,
mp_controller
应该是一个类,其方法名为
pos
open
adv
,等等@juanpa,是的,我可以看到(我想我在我的作品中也说过)。不过,肯定有办法让实例保持活力?毕竟,如果它是在根命名空间中实例化的,它将继续可以访问。我不确定让它成为一个类如何改变这种行为。