如何实现每次运行函数时自动更改变量名,并让脚本循环运行时依次将u1、u2、u3赋值给变量m
解决循环中依次赋值u1/u2/u3给m的问题
首先得指出你当前代码的两个小问题:一是单独定义的u1/u2/u3没法方便地按顺序迭代;二是你的while循环里没有递增i,会直接陷入死循环!
下面给你几种规范且易维护的解决方案:
方案1:用列表+itertools.cycle实现循环迭代
把你的值放进一个列表里,再用cycle来循环遍历这个列表,这样每次循环都能依次拿到value1/value2/value3,并且会重复这个序列直到循环结束:
from itertools import cycle # 把原来的u1/u2/u3的值统一存到列表里 values = ['value1', 'value2', 'value3'] value_iterator = cycle(values) i = 1 while i < 10: function() # 每次取序列的下一个值 m = next(value_iterator) # 别忘了递增i,否则会死循环! i += 1
方案2:用列表+索引取模(无需额外库)
如果不想引入itertools,可以通过计算索引的方式来循环获取列表中的值,用取模运算%来实现序列的重复:
values = ['value1', 'value2', 'value3'] i = 1 while i < 10: function() # 计算当前要取的元素索引:(i-1)是让i从1开始对应索引0,%3实现循环 current_idx = (i - 1) % len(values) m = values[current_idx] i += 1
为什么不推荐直接通过变量名动态取值?
你可能会想到用globals()或locals()来通过字符串拼接的变量名(比如f'u{i}')取值,像这样:
u1 = 'value1' u2 = 'value2' u3 = 'value3' i = 1 while i < 10: function() var_name = f'u{(i-1)%3 +1}' m = globals()[var_name] i += 1
但这种方法非常不推荐:它依赖全局变量的命名,一旦变量名修改或者拼写错误就会引发异常,而且代码的可读性和维护性都很差,远不如用列表存储的方式规范。
内容的提问来源于stack exchange,提问作者BEAST々 YASH
相关产品推荐
相关产品推荐

