Python:增加全局变量的优雅方式



在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))

最新更新