首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3变量传递问题

Python3变量传递问题
EN

Stack Overflow用户
提问于 2018-12-06 18:14:29
回答 2查看 23关注 0票数 0

示例代码,试着忽略它看起来是不必要的过于复杂-这是从实际代码中下来的方式,但完全模仿流程。

代码语言:javascript
复制
def setup():
   print("Setting up...")
   do_something()

def do_something():
   task = str(input("Enter a task to do: "))
   try:
      print("Doing {}...".format(task))
   except:
      print("Failed to do {}...".format(task))
   finally:
      return task

def choose_2(choice):
   print("You chose {}".format(choice))

def menu_1():
   choice = int(input("Choose 1 or 2: "))
   if choice == 1:
      setup()
      menu_2(task)

menu_1()

但是,程序返回"UnboundLocalError:局部变量‘之前引用的任务’“。

为什么do_something() 将变量task返回到menu_1()中的if语句?一旦setup() (以及随后的do_something())完成运行,do_something()的返回值不应该留在if语句中吗?

EN

回答 2

Stack Overflow用户

发布于 2018-12-06 18:17:45

流程是:menu_1() => menu_2(task)

task尚未在menu_1()的作用域中定义,因此无法定义。

您可能打算这样做:

代码语言:javascript
复制
def setup():
   print("Setting up...")
   return do_something()
.....
# in menu_1():
menu_2(setup())

注意,由于setup现在返回某些内容,所以可以使用该返回值。

票数 1
EN

Stack Overflow用户

发布于 2018-12-06 18:40:46

setup()和menu_1()函数应该更改如下:

代码语言:javascript
复制
def setup():
    print("Setting up...")
    do_something()

def menu_1():
   choice = int(input("Choose 1 or 2: "))
   if choice == 1:
       task=setup()
       menu_2(task)

说明: menu_1()调用do_something(),setup()调用do_something()。现在'do_something()‘将返回任务的值,但不是从'setup()’函数返回到menu_1(),然后在menu_1()中,必须将返回的值存储在一个名为'task‘的变量中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53657415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档