在Python中,无法将全局变量传递给模块内的多个函数

在Python中,无法将全局变量传递给模块内的多个函数,python,global-variables,maya,Python,Global Variables,Maya,在浏览了所有可能的资源之后,我得出了一个结论:我需要一个紧急的帮助来将全局变量从一个函数传递给Python模块中的其他函数 实际上,我正在用Autodesk 2010年5月2日编写一个小UI,下面简要介绍一下这个问题 在下面的代码中,我得到了两个模块级全局变量,我在函数中为它们赋值。现在,如果我直接传递这些变量(即不转换函数调用并将其指定为字符串),那么代码工作正常,但是由于按钮函数的命令标志只允许字符串或函数名,因此我只能使用这种调用函数的方法 我得到的结果是: 临时变量=无 窗口=无 我对此

在浏览了所有可能的资源之后,我得出了一个结论:我需要一个紧急的帮助来将全局变量从一个函数传递给Python模块中的其他函数

实际上,我正在用Autodesk 2010年5月2日编写一个小UI,下面简要介绍一下这个问题

在下面的代码中,我得到了两个模块级全局变量,我在函数中为它们赋值。现在,如果我直接传递这些变量(即不转换函数调用并将其指定为字符串),那么代码工作正常,但是由于按钮函数的命令标志只允许字符串或函数名,因此我只能使用这种调用函数的方法

我得到的结果是:

临时变量=无

窗口=无

我对此一无所知

有人能指出当我使用字符串值作为函数调用时到底发生了什么吗

**The sample code**:


import maya.cmds;
temp_var=None;
a_Window=None;
def im_PrimaryFunc():
    imSecondary_func();

def imSecondary_func():
    global a_Window;
    global temp_var;
    a_Window=maya.cmds.window(title="Something");
    a_layout=maya.cmds.columnLayout(adj=1,rs=10);
    temp_var=maya.cmds.createNode("polySphere");
    func_call="a_calledFunc(a_Window,temp_var)";
    maya.cmds.button(label="call_aFunc",align="center",command=func_call);
    maya.cmds.showWindow(a_Window);

def a_calledFunc(arg00,arg01):
    print(arg00);
    print(arg01);
试试这个代码

import maya.cmds
from functools import partial
temp_var=None
a_Window=None
def im_PrimaryFunc():
    imSecondary_func()

def imSecondary_func():
    global a_Window
    global temp_var
    a_Window=maya.cmds.window(title="Something")
    a_layout=maya.cmds.columnLayout(adj=1,rs=10)
    temp_var=maya.cmds.createNode("polySphere")
    maya.cmds.button(label="call_aFunc",align="center",command = partial(a_calledFunc,temp_var, a_Window))
    maya.cmds.showWindow(a_Window)

def a_calledFunc(arg00,arg01, part):
    print(arg00)
    print(arg01)

im_PrimaryFunc()
请记住,您正在编写python代码,因此无需添加;在您的代码中:)

尝试此代码

import maya.cmds
from functools import partial
temp_var=None
a_Window=None
def im_PrimaryFunc():
    imSecondary_func()

def imSecondary_func():
    global a_Window
    global temp_var
    a_Window=maya.cmds.window(title="Something")
    a_layout=maya.cmds.columnLayout(adj=1,rs=10)
    temp_var=maya.cmds.createNode("polySphere")
    maya.cmds.button(label="call_aFunc",align="center",command = partial(a_calledFunc,temp_var, a_Window))
    maya.cmds.showWindow(a_Window)

def a_calledFunc(arg00,arg01, part):
    print(arg00)
    print(arg01)

im_PrimaryFunc()

请记住,您正在编写python代码,因此无需添加;在您的代码中:)

不要使用分号。不使用分号可以解决问题?@user1507332:不,这就是为什么它被写为注释,而不是答案。不要使用分号。不使用分号可以解决问题?@user1507332:不,这就是为什么它被写为注释,不是答案。你改变了什么,为什么在你写的时候它会起作用,现在还不清楚。也许你可以澄清一下你改变了什么?哦,是的,首先他的代码对我有用,我不知道为什么它对他不起作用。我做了一些清理工作,我想他是从梅尔来的,所以我把这个;。还有
func_call=“a_calledFunc(a_Window,temp_var)”中的另一个主要内容更改为
部分(一个称为unc的临时变量,一个窗口)
以获得更多安全性。嘿,阿卡扬!谢谢你的回复,很遗憾我不在家。我回来后一定会试试这个。虽然我不知道“部分”模块:)肯定会尝试的是它工作了阿卡扬真棒:),我会通过functools模块。此外,在使用“partial”时,我不需要声明全局变量。早些时候,程序在Maya将变量导入全局名称空间的方式上遇到问题,尤其是在我将此脚本作为模块导入时。再次感谢。okie dokie已经这么做了,再次感谢,这非常有帮助!现在还不清楚你改变了什么,以及为什么在你写的时候它会起作用。也许你可以澄清一下你改变了什么?哦,是的,首先他的代码对我有用,我不知道为什么它对他不起作用。我做了一些清理工作,我想他是从梅尔来的,所以我把这个;。还有
func_call=“a_calledFunc(a_Window,temp_var)”中的另一个主要内容更改为
部分(一个称为unc的临时变量,一个窗口)
以获得更多安全性。嘿,阿卡扬!谢谢你的回复,很遗憾我不在家。我回来后一定会试试这个。虽然我不知道“部分”模块:)肯定会尝试的是它工作了阿卡扬真棒:),我会通过functools模块。此外,在使用“partial”时,我不需要声明全局变量。早些时候,程序在Maya将变量导入全局名称空间的方式上遇到问题,尤其是在我将此脚本作为模块导入时。再次感谢。okie dokie已经这么做了,再次感谢,这非常有帮助!