Python函数参数前缀下划线含义及死循环问题排查
问题解答:Python函数死循环与下划线前缀参数的含义
一、下划线前缀参数_params的含义
单下划线开头的变量/参数是Python里的命名约定,用来暗示这个变量属于“内部使用”,提醒其他开发者尽量不要直接修改或外部访问它,但Python本身不会做任何强制限制。这和你知道的“忽略用下划线”(比如for _ in range(5)里的_)不是一回事,后者是用来表示不需要用到的变量。
二、死循环的原因
这段代码死循环的核心问题是Python不可变对象的参数传递机制:
- 主程序里的
params是整数类型,属于不可变对象。调用calc(params)时,函数里的_params只是原params的一个副本,不是同一个变量。 - 函数里执行
_params -=1,只是修改了这个副本的值,完全不会影响主程序里的params变量。 - 主程序的
params永远是1,while params >0的条件永远成立,循环就会无限执行下去。
修复方法示例
方法1:让函数返回修改后的值
def calc(_params): if _params > 0: _params -= 1 return _params if __name__ == '__main__': params = 1 while params > 0: params = calc(params) # 将函数返回值赋值给原变量
方法2:使用可变对象传递(比如列表)
def calc(_params): if _params[0] > 0: _params[0] -= 1 if __name__ == '__main__': params = [1] # 用列表(可变对象)存储值 while params[0] > 0: calc(params)
内容的提问来源于stack exchange,提问作者Xu Shan
相关产品推荐
相关产品推荐

