You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 16:15:01