2017-03-05 251 views
0

所以我是初學者,這是我正在上的一堂課。我知道return,但它不是讓我做什麼我想在這段代碼做函數外的訪問函數變量?

這是包含該變量的函數:

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來擺脫錯誤,但是當我使用它時,變量中的數據是錯誤的。任何想法我可以做什麼來解決它?

請記住我是一個絕對的初學者,你看到的是我基本上都明白蟒到目前爲止

謝謝!

回答

1

當函數返回時,函數內部的變量消失(「超出範圍」)。

爲了得到一個值出來的功能,你需要做兩件事情:

  1. 在功能 - return值,或者價值觀。

  2. 當您調用函數 - 保存值或值。你可以通過設置一個等於函數結果的變量來做到這一點:flavour = display_cookies()

考慮這個例子:

def answer_to_life(): 
    answer = 42 
    return answer 

ans = answer_to_life() 
print (ans)    # output: 42 

請注意,我用的函數(answer)和外部(ans)內的不同的變量名。你可以使用相同的名字,但是這可能會在你的教育早期混淆你的名字。

+0

謝謝您的回覆! 現在我有一個新的問題,但。我有更新的代碼如下: 'flavor = disp_cookies()' 'print(「\ n」,flavor)' 'print(「\ n {} s,{} box(es),$ {總」。格式(flavor_names [味],qty_list [order_no],ITEM_TOTAL))' 但現在我得到這個錯誤: IndexError:列表索引超出範圍 難道我莫名其妙地叫可變錯了嗎? – tonberryking

+0

@tonberryking,請問這是一個單獨的問題。很難排除評論中的問題 - 我無法從評論中複製粘貼代碼並運行它!將您的程序縮減爲[簡短,自包含的示例](http://sscce.org/)將有助於您及時做出迴應。 –