如何在for循环中正确实现变量乘法?解决原代码变量值未更新问题
嘿,这个问题我之前也碰到过!咱们先搞清楚为啥原来的代码没效果,再看怎么改~
首先看你原来的代码:
a = 4 b = 6 for i in [a,b]: i *= 2
为啥执行后a和b还是4和6?核心原因是Python里的整数是不可变类型。当你写for i in [a,b]时,i其实只是拿到了a、b的值的副本——换句话说,i是个完全独立的新变量,和原来的a、b没有任何关联。你修改i的值,只会改变i本身,根本碰不到原变量a和b。
那怎么让a和b跟着循环更新呢?这里有两种实用的思路:
1. 用列表存储变量,通过索引修改元素
把a和b放进一个列表里,遍历列表的索引直接修改对应位置的元素,最后再把更新后的值重新赋值给a和b:
a = 4 b = 6 nums = [a, b] # 遍历列表的索引,直接修改列表元素 for idx in range(len(nums)): nums[idx] *= 2 # 把更新后的值赋值回原变量 a, b = nums[0], nums[1] print(a, b) # 输出:8 12
这种方法很灵活,哪怕后续要处理更多变量,只要把它们放进列表就行。
2. 直接在循环中操作原变量(适合变量少的场景)
如果只有a和b两个变量,也可以直接在循环里通过判断来更新它们:
a = 4 b = 6 # 遍历变量名的字符串,判断后更新原变量 for var_name in ['a', 'b']: if var_name == 'a': a *= 2 else: b *= 2 print(a, b) # 输出:8 12
不过这种方式只适合变量数量少的情况,变量多了维护起来会很麻烦。
总结一下:Python的不可变类型在遍历的时候,循环变量是值的副本而非原变量的引用。所以要通过修改可迭代对象(比如列表)里的元素,或者直接操作原变量,才能让a和b的值发生预期改变。
内容的提问来源于stack exchange,提问作者Chan
相关产品推荐
相关产品推荐

