在多个函数中使用列表
在一个函数里创建的列表,可以在另一个函数里使用吗?
我在这个函数里创建了一个盘片的列表:
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)
不过我觉得这对你帮助不大,因为你可能需要在整个程序中保持列表的状态。