在多个函数中使用列表

时间:2014-04-28 13:22:17

标签: python list function maya

是否可以在单独的函数中使用在一个函数中创建的列表?

我已在此功能中创建了光盘列表:

def create_discs():

    disc_list=['disc0', 'disc1', 'disc2']

然后我想在另一个函数中使用这个列表

def move_discs

    cmds.move(disc_list[1], 0, 0, 5)

尝试这样做时出现此错误:

NameError: file <maya console> line 48: global name 'disc_list' is not defined #

我正在使用Autodesk Maya

5 个答案:

答案 0 :(得分:1)

您只需要在第一个函数中返回该列表:

>>> def create_discs():
    disc_list=['disc0', 'disc1', 'disc2']
    return disc_list


>>> def move_discs():
    l = create_discs()
    print(l)
>>> move_discs()
['disc0', 'disc1', 'disc2']

答案 1 :(得分:0)

你可以让第一个函数返回想要的列表,然后在任何你喜欢的地方使用它:

def create_discs():
    disc_list = ['disc0', 'disc1', 'disc2']
    return disc_list

def move_discs():
    disc_list = create_discs()
    cmds.move(disc_list[1], 0, 0, 5)

希望这会有所帮助。

答案 2 :(得分:0)

如果您不想使用Classes来维护状态,那么您可能希望拥有global变量,或者可以从create_list()返回列表。

使用全局变量

disc_list = []

def create_list():
    global disc_list

    disc_list = ['disc0', 'disc1', 'disc2']

def move_discs
    cmds.move(disc_list[1], 0, 0, 5)

请注意,不鼓励使用全局变量。

create_list() 返回列表:

def create_list():
    return ['disc0', 'disc1', 'disc2']

def move_discs():
    disc_list = create_list()
    cmds.move(disc_list[1], 0, 0, 5)

但是我认为这对你没什么帮助,因为你可能需要在整个程序中保持列表的状态。

答案 3 :(得分:0)

有几种方法可以做你想做的事。

如果您只想使用create_discs创建列表一次,以便在move_discs中使用它,您可以修改create_discs以返回它创建的列表,然后调用{ {1}}中的{1}}:

create_discs

如果您希望保存已创建的列表以便可以在整个程序中使用它,您可以再次让move_discs返回其列表,并将其保存到变量中。然后可以通过def create_discs(): return ['disc0', 'disc1', 'disc2'] def move_discs(): cmds.move(create_discs()[1], 0, 0, 5) move_discs() 或任何其他函数访问此变量:

create_discs

我不确定你是否已经研究过函数参数,但它们是支持你试图实现的行为的函数的一个特性:

moved_discs

答案 4 :(得分:0)

列表是自己的持久对象。如果从一个函数返回列表,则可以在其他函数中操作它:

def get_list():
    return [1,2,3,4]


def remove_last_item( the_list):
    the_list.remove(the_list[-1]) #  remove the last entry


def insert_something(the_list, item):
    the_list.insert(item, 0)

my_list = get_list()
print my_list
# [1,2,3,4]

remove_last_item(my_list)
print my_list
# [1,2,3]

insert_something(my_list, 0)
print my_list
# [0,1,2,3]