如何在python中实现静态计数器

2024-06-28 15:05:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在调用一个方法,我需要在这个方法中有一个静态计数器。它需要解析列表的元素。计数器将告诉要查找的列表的哪个位置。在

例如

static_var_with_position = 0
noib_list = [3, 2, 2, 2, 2, 1, 2, 2]

def foo(orig_output, NOB):
    # tried two ways

    #static_var_with_position += 1 # doesn't work

    #global static_var_with_position
    #static_var_with_position += 1 # doesn't work either

    bit_required = noib_list[static_var_with_position]
    converted_output = convert_output(orig_output, NOB, bit_required)

具有“位置”值的静态“变量”从不递增。我已经评论了我试图增值的两种方式。在

在c++中是小菜一碟,但到目前为止,我在python中找不到类似的东西。如有任何帮助,我们将不胜感激:)

谢谢!在


Tags: 方法列表outputvarwith静态计数器position
3条回答

按照此示例,您可以对计数器执行相同的操作:

def inc() : 
    global global_cpt 
    global_cpt +=1
    print global_cpt

if __name__ == '__main__' : 
    global_cpt = 0
    inc()
    inc()
    inc()

将打印

^{pr2}$

我实际上并不提倡在您的情况下这样做,但在函数中创建“静态”变量是一种鲜为人知的方法:将它作为一个具有可变默认值的参数!你可以在函数中修改它,只要调用者不为它传递值,它将一直保持到下一次函数调用。在

def foo(value=[0]):
    value[0] += 1
    print(value[0])

>>> foo()
1
>>> foo()
2
>>> foo()
3
>>> foo([906])
907
>>> foo()
4

您可以使用^{},而不是使用全局/静态计数器变量:

iterator = iter(noib_list)

def foo(orig_output, NOB):
    bit_required = next(iterator)
    converted_output = convert_output(orig_output, NOB, bit_required)

迭代器将自动在内部跟踪^{}元素。在

当迭代器耗尽时(即当您到达列表的末尾时),next将引发一个StopIteration错误,因此如果您不知道何时到达结尾,可以使用bit_required = next(iterator, None);然后只测试该值是否为None,并且您知道列表已用尽(或仅使用try/except)。在

相关问题 更多 >