Python函数赋值给变量时重复运行的原因及解决方法
问题产生原因
函数重复执行是代码本身的写法导致的,和Replit平台、调试模式没有关系:
Python中只要出现函数名()的写法,解释器就会立刻执行对应函数的全部内部逻辑。你的代码在if判断块中连续写了两次process()调用:
- 第一行是单独的
process():这次调用会完整走完提示输入、清屏、处理输入的全流程,但返回值没有被任何变量接收,执行完后本次产生的输入结果会随着函数局部变量销毁直接丢失,属于无意义的冗余调用。 - 第二行
a = process():这是第二次触发函数执行,这次的返回值会被赋值给变量a供后续打印语句使用,因此你会观察到函数连续跑了两次、需要重复输入内容的现象。
另外当前process()函数依赖全局变量info获取输入配置,属于不严谨的写法,后续代码迭代时很容易触发作用域相关bug。
修复方案
- 基础修复:直接删除if块中没有赋值操作的冗余
process()调用,只保留绑定返回值到变量a的那次调用即可,修改后的对应逻辑片段如下:
if num == 1 and 1 not in done: info = [["COLOR: ", False], ["COLOR: ", False], ["EXCLAMATION: ", True]] a = process() print(len(info)) print("My pizza is " + a[0] + " and my tater tots are " + a[1] + "! " + a[2] + "!") done.append(1)
- 优化写法:将输入配置作为参数传入
process(),消除对全局变量的依赖,从根源上避免作用域问题,修改后的完整可运行代码参考:
import random import os done = [] def process(info_config): res = [] for prompt, need_capitalize in info_config: ans = str(input(prompt)) os.system("clear") if need_capitalize: ans = ans.capitalize() res.append(ans) return res numlibs = 1 for i in range (numlibs): num = random.randint(1, numlibs) if num == 1 and 1 not in done: info = [["COLOR: ", False], ["COLOR: ", False], ["EXCLAMATION: ", True]] a = process(info) print(len(info)) print("My pizza is " + a[0] + " and my tater tots are " + a[1] + "! " + a[2] + "!") done.append(1)
内容的提问来源于stack exchange,提问作者StrongSand94191
相关产品推荐
相关产品推荐

