在多个函数中使用列表

0 投票
5 回答
4024 浏览
提问于 2025-04-18 04:35

在一个函数里创建的列表,可以在另一个函数里使用吗?

我在这个函数里创建了一个盘片的列表:

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

列表是独立存在的对象。如果你从一个函数返回一个列表,你可以在其他函数中对它进行操作:

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]
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)

希望这能帮到你。

0

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

如果你只是想用一次 create_discs 来创建一个列表,然后在 move_discs 中使用这个列表,你可以修改 create_discs 让它返回它创建的列表,然后在 move_discs 中调用 create_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 或其他任何函数都可以访问这个变量:

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

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

saved_list = create_discs()

我不确定你是否已经研究过函数参数,但它们是函数的一种特性,可以支持你想要实现的行为:

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

def move_discs(list):
    print(list[1])

saved_list = create_discs()
move_discs(saved_list)  # This will output 'disc1'

saved_list = ['new0', 'new1', 'new2']
moved_discs(saved_list)  # This will now output 'new1'
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']
0

如果你不想用类来保存状态,那你可以考虑使用一个 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)

不过我觉得这对你帮助不大,因为你可能需要在整个程序中保持列表的状态。

撰写回答