在Python中增加全局变量的优雅方法:
这就是我目前所拥有的:
my_i = -1
def get_next_i():
global my_i
my_i += 1
return my_i
带发电机:
my_iter = iter(range(100000000))
def get_next_i():
return next(my_iter)
具有类别:
class MyI:
MyI.my_i = -1
@staticmethod
def next():
MyI.my_i += 1
return MyI.my_i
- 第一个很长,我不认为它是更好的编码方式
- 第二个比较优雅,但有上限
- 第三个是长的,但至少没有全局变量可以使用
什么是最好的替代方案
这些函数的目的是为代码中的特定事件分配一个唯一的编号。代码不仅仅是一个循环,因此这里不适合使用
for i in range(...):
。更高版本可能会使用分配给不同事件的多个索引。第一个代码需要重复才能解决这样的问题。(get_next_i()
,get_next_j()
,…(
谢谢。
正如其他人所建议的,itertools.count()
是最好的选择,例如
import itertools
global_counter1 = itertools.count()
global_counter2 = itertools.count()
# etc.
然后,当您需要它时,只需调用next
:
def some_func():
next_id = next(global_counter1)
EDIT:将global_counter1.next()
(仅适用于Python 2(更改为next(global_counter1)
,后者也适用于Python 3。
您可以创建一个具有无限循环的生成器。next(generator)
的每次调用都将返回下一个值,没有限制。请参阅";产量;Python中的关键字do?
def create_generator()
i=0
while True:
i+=1
yield i
generator = create_generator()
print(next(generator))
print(next(generator))