2017-04-04 71 views
0

我相信我的功能有些不正确,但我仍然对Python和一般功能非常​​陌生,而且我错过了我的问题。在下面的代码中,我没有向该函数发送任何值,但是一旦函数读取数据库,我希望它将数据库中的值返回到主程序中。我在函数内部放置了一个print语句,以确保它从数据库中提取值并且一切正常。我在主区域的函数调用之后复制并粘贴了相同的打印行,但我得到了NameError: 'wins' is not defined。这导致我相信我没有正确返回值?Python3函数返回值

#Python3 
import pymysql 

def read_db(): 
    db = pymysql.connect(host='**********',user='**********',password='**********',db='**********') 
    cursor = db.cursor() 
    sql = "SELECT * FROM loot WHERE id = 1" 
    cursor.execute(sql) 
    results = cursor.fetchall() 
    for row in results: 
     wins = row[2] 
     skips = row[3] 
     lumber1 = row[4] 
     ore1 = row[5] 
     mercury1 = row[6] 
    db.commit() 
    db.close() 
    print ("Wins = ",wins," Skips = ",skips," Lumber = ",lumber1," Ore = ",ore1," Mercury = ",mercury1) 
    return (wins, skips, lumber1, ore1, mercury1) 

read_db() 
print ("Wins = ",wins," Skips = ",skips," Lumber = ",lumber1," Ore = ",ore1," Mercury = ",mercury1) 
+0

在函数(或类)中声明的变量不存在于函数(或类)之外。这样你就可以对不同的变量在不同的上下文中使用不同的变量,并且它们不会互相干扰。您也不需要关心您调用的函数中使用的变量名称。这被称为“词法作用域”,它非常有用,所有现代语言都使用它(尽管发明花了很长时间)。但是,这意味着,正如其他人指出的那样,如果您想稍后使用它们,则需要为函数的返回值分配名称。 –

回答

2

这样做只是read_db()导致引发出来的返回值。您需要将返回值赋值给变量:

wins, skips, lumber, ore = read_db() 

,你回来了一个名为wins并不意味着wins变量将成为你打电话read_db()范围可变量的事实。您需要明确指定返回值。

1

您在函数中声明的变量只存在于该函数的作用域中。

您必须使用

ins, skips, lumber1, ore1, mercury1 = read_db() 
+0

错字:我相信你打算调用返回的元组“wins”的第一个元素来匹配所提供的示例。 –