函数外的函数变量?

时间:2017-03-05 07:15:35

标签: python python-3.x

所以我是初学者,这是我上课的。我知道def disp_cookies(): # This stuff is just for a print display inx = 0 # Displays list vertically while inx < len(flavor_names): print("{}. {}".format(inx + 1, flavor_names[inx])) inx += 1 valid_data = False while not valid_data: try: # This is the variable I need flavor = int(input("\nSelect a number for flavor> ")) if 0 < flavor <= len(flavor_names): item_list.append(flavor) print(flavor_names[int(flavor) - 1]) return flavor # This is the return break except Exception: print("\nError. Please try again") else: print("\nPlease enter a valid response") ,但它并没有让我做我在这段代码中尝试做的事情

这是包含变量的函数:

print("\n", flavor) # This is outside of the function in the previous snippet btw
print("\n{}s, {} box(es), ${} total".format(flavor_names[flavor - 1], qty_list[order_no], item_total))

在这里,我尝试使用变量:

Traceback (most recent call last):
  File "C:\Users\wiche\Documents\School\Python CIS122\L8_orderCost.py", line 95, in <module>
    print("\n", flavor)
NameError: name 'flavor' is not defined

这是我得到的错误:

flavor

我可以通过在函数外部定义spring.mvc.throw-exception-if-no-handler-found=true spring.resources.add-mappings=false 来消除错误,但是当我使用它时,变量中的数据是错误的。知道我能做些什么来修复它吗?

请记住,我是一个绝对的初学者,你所看到的基本上是我对python的了解到目前为止

谢谢!

2 个答案:

答案 0 :(得分:1)

当函数返回时,函数内的变量消失(“超出范围”)。

要从函数中获取值,您需要做两件事:

  1. 在函数中 - return一个或多个值。

  2. 调用函数时 - 保存值或值。您可以通过设置一个等于函数结果的变量来实现:flavour = display_cookies()

  3. 考虑这个例子:

    def answer_to_life():
        answer = 42
        return answer
    
    ans = answer_to_life()
    print (ans)             # output: 42
    

    请注意,我在函数(answer)和外部(ans)中使用了不同的变量名。您可以使用相同的名称,但这可能会使您在早期教育中感到困惑。

答案 1 :(得分:0)

这是范围问题。你必须使用称为flavor的变量。一个在全球范围内,一个在功能范围内。

如果要访问函数内的全局变量,则需要在函数内部使用'global'关键字。

另一种可能性是将函数的返回值赋给全局变量flavor。

有关示例的完整说明,请参阅[http://python-textbok.readthedocs.io/en/1.0/Variables_and_Scope.html#more-about-scope-crossing-boundaries]