<p>您应该使<code>counter</code>成为<code>nonlocal</code>(在Python3中引入了非局部)</p>
<pre><code>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):
nonlocal counter
for i in l:
counter += 1
if isinstance(i, (list, tuple)):
recurse(i)
else:
print("{}. {}.".format(counter, i))
recurse(i)
generateMenu(lst, lst2, lst3)
</code></pre>
<p>或者,从<code>recurse</code>返回<code>counter</code></p>
<pre><code>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)):
counter = recurse(i, counter)
else:
print("{}. {}.".format(counter, i))
return counter
counter = recurse(i, counter)
generateMenu(lst, lst2, lst3)
</code></pre>