Python如何将def等缩进代码块内的变量提取到外部使用
问题原因
Python遵循明确的作用域规则:在def函数内部直接赋值的变量,默认属于函数局部作用域,仅能在函数内部访问,函数执行完成后局部变量会被回收,外部无法直接读取。
你的代码里仅对num变量做了global全局声明,因此只有num是全局可访问的,函数内部定义的num2、num3、rmin都是局部变量,外部调用自然会报未定义错误。
推荐解决方案
优先使用return返回需要的变量,这是最符合Python编码规范的写法,不会造成全局变量污染:
- 修改
calculate函数的逻辑,在函数末尾用return返回需要在外部使用的变量,支持同时返回多个值,用逗号分隔即可 - 外部调用函数时,用对应数量的变量接收返回值,即可在外部作用域正常使用这些值
修改后的可运行示例代码:
print("chain wheel calculator") print("enter the little diameter in mm :") little_input = input() print("enter the big diameter in mm :") big_input = input() little_input = int(little_input) big_input = int(big_input) num = 9 def calculate() : global num num += 1 num2 = num * big_input num3 = num2 / little_input print(num3) rmin = num2 % little_input if rmin == 0 : print(num3) # 返回需要外部使用的变量,多个变量用逗号分隔即可 return num3, rmin while num <= 100 : # 调用函数时接收返回值 current_num3, current_rmin = calculate() # 此处即可正常使用current_num3、current_rmin做后续逻辑处理
其他可选方案(不推荐)
如果确实需要把num3设为全局变量,可以在函数内部给num3也加上global声明,和你对num的处理方式一致:
def calculate() : # 声明num和num3都是全局变量 global num, num3 num += 1 num2 = num * big_input num3 = num2 / little_input # 其余逻辑不变
这种方式会增加全局变量数量,提升代码调试、维护的难度,非必要场景不要使用。
内容的提问来源于stack exchange,提问作者Parsa Ad
相关产品推荐
相关产品推荐

