Python3 函数内声明global后仍无法递增全局count变量问题排查
问题原因
你遇到的问题根本不是global声明无效,是打印count的时机早于count修改的逻辑:
你的main函数执行顺序是:
- 先打印全局变量count的初始值0
- 之后才调用
findthesum函数对count做递增操作
你打印的是还没被修改的初始值,自然看不到递增后的结果。
修复方案
只需要调整打印count的位置,放在findthesum调用之后即可。也可以同时优化2的幂的判断逻辑,不需要预生成列表,用位运算判断效率更高:2的整数次幂的二进制表示只有1个1,满足x > 0 且 x & (x-1) == 0的条件。
修复后完整代码
count=0 def findthesum(a,n): global count sum=0 for j in range(n): num = a[j] if num > 0 and (num & (num - 1)) == 0: count += 1 sum += num return sum def main(): global count n=5 a=[1,2,3,4,5] print(findthesum(a,n)) # 放在调用之后打印count print(count) main()
运行后输出结果符合预期:
7 3
符合条件的元素是1、2、4,和为7,数量为3。
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

