2015-10-30 41 views
1

我試圖編寫一個程序,但遇到了return語句的問題。python中的return語句

以下幾行代碼引發了錯誤消息,說明變量names未定義。

不過,我沒有使用return語句返回names並將它傳遞給主要功能:

def main(names): 
    names_in() 
    print(names) 

# import the record, put it into a list, pass that list to main(). 
def names_in(): 
    infile = open('names.txt','r') 
    names = infile.readlines() 

    infile.close() 

    index = 0 
    while index < len(names): 
     names[index] = names[index].rstrip('\n') 
     index += 1 
    return names 

main(names) 

我已經寫了另一個程序之前做同樣的事情,一切工作正常,所以我米不知道這裏有什麼問題?

+0

好了,你想用'高清主(地名)做什麼:'?這裏真的需要爭論嗎?也許你的意思是'print(names_in())'。 –

+0

題外話:'names_in'讓我害怕。它可以簡化爲:將open('names.txt','r')作爲infile:return [name.rstrip('\ n')作爲infile中的名字]'並且運行得更快,慣用。 – ShadowRanger

+0

@ShadowRanger:我這樣做是因爲作業要求我們在我們的程序中具有該功能。 –

回答

5

你的問題是在這裏:

您正在使用尚未定義的變量名呼喚你main功能。你得到的錯誤應該顯示一個指向這一行的行號:這將驗證這是問題所在。

# 'names' is not defined in this scope 
def main(names): 
    # Some code 
    # 'names' is a variable that is 'in scope' here because it's passed as an 'argument' 

# 'names' is not defined in this scope either 

# import the record, put it into a list, pass that list to main(). 
def names_in(): 
    infile = open('names.txt','r') 
    names = infile.readlines() # defines 'names' for this scope 

    # more code 
    return names # because 'names' is defined it can return it 

# 'names' is no longer defined in this scope 
main(names) # This fails because when the compiler tries to resolve 'names' it can't find anything 

基於什麼你顯然試圖做的,你需要修改main功能,像這樣:

def main(): 
    print(names_in()) 

,並調用它像這樣:

main() 

注,你也似乎對代碼的執行方式有些困惑。如果我寫:

def a(): 
    print("a") 

def b(): 
    print("b") 

print("c") 
b() 
a() 

它被翻譯成的東西相當於:

print("c") 
print("b") 
print("a") 

def語句得到複製粘貼的,有效的,到他們被稱爲地方。

+0

謝謝你的幫助。還有一個後續問題。這裏的return語句只會在函數完成所有步驟後,將函數names_in()中返回的變量「names」中的內容返回給對象? –

+0

這是正確的。但它只是返回值,而不是名稱。 –

1

您的main函數不應該接受任何參數。相反,它應該使用names_in返回值:

def main(): 
    names = names_in() 
    print(names) 

後面的代碼:

main()