Python如何在一个函数中使用另一函数内部收集的数据
报错原因
Python中的变量有作用域限制,函数内部定义的变量默认属于局部变量,仅在当前函数内部可访问,其他函数无法直接读取,这就是你触发NameError: name 'choice1' is not defined的核心原因。
你在function1末尾写的return choice1仅会将变量的值返回给调用方,不会自动把choice1变为全局可用的变量。
推荐解决方案:参数传递
最符合Python开发规范的做法是,调用function1接收返回值,再将值作为参数传入function2,这种方式代码耦合度最低,后续维护更方便。
修改后的代码如下:
def function1(): while True: choice1 = (input("Random text")).lower() if choice1 in ('option1', 'option2'): break else: print("Even more random text") return choice1 # 给function2添加接收choice1的参数 def function2(choice1): rightEvenOdd = 'random word' if choice1 == rightEvenOdd: print('Yay') else: print('Not yay') # 调用时按顺序执行即可 if __name__ == "__main__": user_choice = function1() function2(user_choice)
可选方案:全局变量(不推荐)
如果场景需要多个函数共享变量,也可以通过global关键字将变量声明为全局变量,不过该方案容易引发变量值意外被修改的问题,新手尽量优先使用第一种方案。
修改示例:
# 提前在全局作用域定义变量 choice1 = "" def function1(): # 声明函数内操作的是全局变量choice1 global choice1 while True: choice1 = (input("Random text")).lower() if choice1 in ('option1', 'option2'): break else: print("Even more random text") return choice1 def function2(): global choice1 rightEvenOdd = 'random word' if choice1 == rightEvenOdd: print('Yay') else: print('Not yay') # 调用时先执行function1赋值,再执行function2即可 if __name__ == "__main__": function1() function2()
内容的提问来源于stack exchange,提问作者TheDiablero22
相关产品推荐
相关产品推荐

