在 Python 中返回函数后枚举停止计数
Enumerate stops counting after returning a function in Python
我的问题是我想在我的 worker 中调用 return logout()
但这确实破坏了枚举并将 idx
计数器设置为 0 所以它不会打印 item
. return 怎样退出才能不出现这个问题?
代码:
import time
def logout():
print("logout")
N = 4
def worker():
for idx, Item in enumerate(range(1, 12)):
if idx % N == 0:
print("Done Session")
time.sleep(1)
return logout()
print(Item)
worker()
worker()
worker()
输出:
Done Session
logout
Done Session
logout
Done Session
logout
预期输出:
Done Session
logout
1
2
3
4
Done Session
logout
5
6
7
8
Done Session
logout
...
您可以将必要的东西存储在一个列表中,然后 return 一次全部 (注意:我注释了一些输出不需要的代码行):
N = 4
def worker():
log = [] # Not needed
for idx, Item in enumerate(range(1, 12)):
if idx % N == 0:
print("Done Session")
time.sleep(1)
log.append(logout()) # logout()
print(Item)
return log # Not needed
结果:
Done Session
logout
1
2
3
4
Done Session
logout
5
6
7
8
Done Session
logout
9
10
11
Done Session
logout
1
2
3
4
Done Session
logout
5
6
7
8
Done Session
logout
9
10
11
Done Session
logout
1
2
3
4
Done Session
logout
5
6
7
8
Done Session
logout
9
10
11
这会起作用:
N = 4
def worker():
for idx, Item in enumerate(range(1, 12)):
if idx % N == 0:
print("Done Session")
time.sleep(1)
logout()
print(Item)
我的问题是我想在我的 worker 中调用 return logout()
但这确实破坏了枚举并将 idx
计数器设置为 0 所以它不会打印 item
. return 怎样退出才能不出现这个问题?
代码:
import time
def logout():
print("logout")
N = 4
def worker():
for idx, Item in enumerate(range(1, 12)):
if idx % N == 0:
print("Done Session")
time.sleep(1)
return logout()
print(Item)
worker()
worker()
worker()
输出:
Done Session
logout
Done Session
logout
Done Session
logout
预期输出:
Done Session
logout
1
2
3
4
Done Session
logout
5
6
7
8
Done Session
logout
...
您可以将必要的东西存储在一个列表中,然后 return 一次全部 (注意:我注释了一些输出不需要的代码行):
N = 4
def worker():
log = [] # Not needed
for idx, Item in enumerate(range(1, 12)):
if idx % N == 0:
print("Done Session")
time.sleep(1)
log.append(logout()) # logout()
print(Item)
return log # Not needed
结果:
Done Session
logout
1
2
3
4
Done Session
logout
5
6
7
8
Done Session
logout
9
10
11
Done Session
logout
1
2
3
4
Done Session
logout
5
6
7
8
Done Session
logout
9
10
11
Done Session
logout
1
2
3
4
Done Session
logout
5
6
7
8
Done Session
logout
9
10
11
这会起作用:
N = 4
def worker():
for idx, Item in enumerate(range(1, 12)):
if idx % N == 0:
print("Done Session")
time.sleep(1)
logout()
print(Item)