我正在调用一个方法,我需要在此方法中使用静态计数器。它需要解析列表的元素。计数器将告诉列表的哪个位置要查找。
例如
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)
static_var_with_position值永远不会增加。我评论了两种尝试增加价值的方法。
在c ++中它的小菜一碟,但到目前为止我在python中找不到类似的东西。任何帮助将不胜感激:)
谢谢!
答案 0 :(得分:2)
您可以使用iterator
:
iterator = iter(noib_list)
def foo(orig_output, NOB):
bit_required = next(iterator)
converted_output = convert_output(orig_output, NOB, bit_required)
迭代器将自动跟踪内部的next
元素。
当迭代器耗尽时(即当你到达列表的末尾)时,next
会引发StopIteration
错误,所以你不知道何时到达终点,你可以使用而是bit_required = next(iterator, None)
;然后只测试该值是否为None
并且您知道该列表已用尽(或仅使用try/except
)。
答案 1 :(得分:1)
按照此示例,您可以对计数器执行相同的操作:
def inc() :
global global_cpt
global_cpt +=1
print global_cpt
if __name__ == '__main__' :
global_cpt = 0
inc()
inc()
inc()
将打印
> 1
> 2
> 3
答案 2 :(得分:0)
我实际上并不主张在你的情况下这样做,但是在函数中创建一个“静态”变量是一个鲜为人知的黑客:把它作为一个带有可变默认值的参数!您可以在函数内对其进行修改,只要调用者没有为其传递值,它就会一直保持到下一个函数调用。
def foo(value=[0]):
value[0] += 1
print(value[0])
>>> foo()
1
>>> foo()
2
>>> foo()
3
>>> foo([906])
907
>>> foo()
4