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

时间:2016-09-10 08:31:46

标签: python python-3.x for-loop iterator generator

  

在Python中增加全局变量的优雅方法:

这是我到目前为止所做的:

my_i = -1
def get_next_i():
    global my_i
    my_i += 1
    return my_i

with generator:

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(),...)

谢谢。

2 个答案:

答案 0 :(得分:3)

您可以创建具有无限循环的生成器。 next(generator)的每次调用都会返回下一个值,没有限制。见What does the "yield" keyword do in Python?

def create_generator()
    i=0
    while True:
        i+=1
        yield i

generator = create_generator()
print(next(generator))
print(next(generator))

答案 1 :(得分:3)

正如其他人所说,itertools.count()是最好的选择,例如

import itertools

global_counter1 = itertools.count()
global_counter2 = itertools.count()
# etc.

然后,当您需要时,只需致电next

def some_func():
    next_id = global_counter1.next()