如何在函数中通过参数全局增加Python中的值?
变量 genreIndex 只会在这个函数内部增加,而不会在全局范围内增加。有没有办法让它变成全局变量呢?我试着把一个全局变量赋值给 index。
genreList = [4.25, 4, 5, 5, 5, 4.35, 5, 4.5, 3.75, 3.75, 4.75, 5, 5, 5, 4, 4.75, 3.75, 2.75, 5, 5, 4, 3.5, 5, 3.25, 2.5, 5, 3, 4.75, 5, 4, 5, 2, 5, 5, 5, 2.5, 3.25, 0, 4.25, 4, 5, 0, 5, 4.25, 4, 5, 2.5, 5, 4.5, 3.5, 3.25, 4, 1, 3.5, 4, 5, 3, 2.75, 4.5, 3, 5, 0.5, 3, 4, 0, 3.5, 3.25, 3.5, 5, 4, 5, 3.5, 5, 3.5, 3, 4.5, 4.5, 5, 3, 4.75, 3.5, 3.75, 4.5, 4, 3.5, 3.75, 4.5, 5, 5, 3.5, 4.5, 5, 4, 4.5, 5, 4, 3.75, 5, 4.5, 4.5, 3.75, 3.5, 3.75, 3.5, 5, 4.5, 5, 3.5, 4.25, 5, 4, 3.25, 3.5, 2.5, 4, 3.5, 3.75, 0, 3.5, 5, 4.5, 0, 4, 4.25, 5, 4, 3.5, 1.5, 2.5]
genreIndex = 0
def reset(index, list):
global x
index = index + 1
x = index
print(x)
if index > (len(list) - 1):
index = 0
if index < 0:
index = len(list)
print(list[x])
reset(genreIndex, genreList)
reset(genreIndex, genreList)
reset(genreIndex, genreList)
2 个回答
0
当Python调用reset
时,它会获取一个新的指向genreIndex
中值的引用,并把这个匿名的引用传递给函数。reset
并不知道这个值是来自genreIndex
的。整数是不可变的,所以在函数中改变index
会创建一个新的对象,而这个新对象无法直接赋值回全局的值,除非有更多的信息。
假设你希望reset
能够处理任意数量的列表和索引,解决这个问题的常见方法是返回新的数字。调用这个函数的人知道哪个变量对应哪个值,然后可以进行相应的赋值。
genreIndex = 0
def reset(index, list):
index = index + 1
if index > (len(list) - 1):
index = 0
if index < 0:
index = len(list)
print(list[x])
return index
genreIndex = reset(genreIndex, genreList)
genreIndex = reset(genreIndex, genreList)
genreIndex = reset(genreIndex, genreList)
你还可以创建一个类,把索引和单个类型的列表关联起来。一旦这个类被实例化,它的方法就不再需要明确地引用索引或列表了。
class Genre:
def __init__(self, genre_list):
self.genre_list = genre_list
self.index = 0
def reset(self):
self.index += 1
if self.index > (len(self.genre_list) - 1):
self.index = 0
if self.index < 0:
self.index = len(self.genre_list)
print(self.genre_list[self.index])
genre = Genre(genreList)
genre.reset()
genre.reset()
0
为了让 genreIndex
成为一个全局变量,并确保它的变化在全局范围内都能被看到,你需要在你的函数里把它声明为全局变量,像这样:
genreList = [4.25, 4, 5, 5, 5, 4.35, 5, 4.5, 3.75, 3.75, 4.75, 5, 5, 5, 4, 4.75, 3.75, 2.75, 5, 5, 4, 3.5, 5, 3.25, 2.5, 5, 3, 4.75, 5, 4, 5, 2, 5, 5, 5, 2.5, 3.25, 0, 4.25, 4, 5, 0, 5, 4.25, 4, 5, 2.5, 5, 4.5, 3.5, 3.25, 4, 1, 3.5, 4, 5, 3, 2.75, 4.5, 3, 5, 0.5, 3, 4, 0, 3.5, 3.25, 3.5, 5, 4, 5, 3.5, 5, 3.5, 3, 4.5, 4.5, 5, 3, 4.75, 3.5, 3.75, 4.5, 4, 3.5, 3.75, 4.5, 5, 5, 3.5, 4.5, 5, 4, 4.5, 5, 4, 3.75, 5, 4.5, 4.5, 3.75, 3.5, 3.75, 3.5, 5, 4.5, 5, 3.5, 4.25, 5, 4, 3.25, 3.5, 2.5, 4, 3.5, 3.75, 0, 3.5, 5, 4.5, 0, 4, 4.25, 5, 4, 3.5, 1.5, 2.5]
def reset(index_var, lst):
global x
x = index_var + 1
if x >= len(lst):
x = 0
print(lst[x])
x = 0
reset(x, genreList)
reset(x, genreList)
reset(x, genreList)
输出结果:
4
5
5