我正在编写一些编造的代码,试图理解*args
功能,但很难让我的counter
变量不重置。你知道吗
在第4项之后,编号重置回0,但我希望它在参数之间继续。你知道吗
lst = ['apple', 'banana', 'orange', 'lemon']
lst2 = ['apple2', 'banana2', 'orange2', 'lemon2']
lst3 = ['apple3', 'banana3', 'orange3', 'lemon3']
def generateMenu(*args):
counter = 0
for i in args:
def recurse(l, counter):
for i in l:
counter += 1
if isinstance(i, (list, tuple)):
recurse(i, counter)
else:
print("{}. {}.".format(counter, i))
recurse(i, counter)
generateMenu(lst, lst2, lst3)
输出:
1. apple.
2. banana.
3. orange.
4. lemon.
1. apple2.
2. banana2.
3. orange2.
4. lemon2.
1. apple3.
2. banana3.
3. orange3.
4. lemon3.
Python对函数作用域之外的变量的写入有一些奇怪的规则。避免这种情况的最简单方法就是确保递归函数在每个状态返回计数器值。我稍微重构了一下,使它更清楚地显示出发生了什么。你知道吗
问题是你的
recurse
函数不知道你的counter
来自上限。所以在每个for i in l:
循环中增加的只是“内部”counter
变量。你知道吗您的示例可能会让您感到困惑,因为您使用了两次相同的变量名(
counter
和i
)。尝试以不同的方式重命名它们,您可能会更好地了解代码发生了什么。你知道吗您应该使
counter
成为nonlocal
(在Python3中引入了非局部)或者,从
recurse
返回counter
相关问题 更多 >
编程相关推荐