Python 3.x Python3函数返回值

Python 3.x Python3函数返回值,python-3.x,Python 3.x,我相信我的函数有一些不正确的地方,但我对python和函数还是相当陌生,我不知道我的问题是什么。在下面的代码中,我没有向函数发送任何值,但一旦函数读取数据库,我希望它将值从数据库拉回到主程序中。我在函数中放置了一个print语句,以确保它从数据库中提取值,并且一切正常。在主区域中的函数调用之后,我复制并粘贴了相同的打印行,但是我得到了一个名称错误:“wins”未定义。这让我相信我没有正确返回值 #Python3 import pymysql def read_db(): db = py

我相信我的函数有一些不正确的地方,但我对python和函数还是相当陌生,我不知道我的问题是什么。在下面的代码中,我没有向函数发送任何值,但一旦函数读取数据库,我希望它将值从数据库拉回到主程序中。我在函数中放置了一个print语句,以确保它从数据库中提取值,并且一切正常。在主区域中的函数调用之后,我复制并粘贴了相同的打印行,但是我得到了一个
名称错误:“wins”未定义
。这让我相信我没有正确返回值

#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)
只执行
read_db()
会导致抛出返回值。您需要将返回值分配给变量:

wins, skips, lumber, ore = read_db()
返回名为
wins
的变量并不意味着
wins
变量将在您调用的
read_db()
范围内可用。您需要显式地分配返回值

只执行
read_db()
会导致抛出返回值。您需要将返回值分配给变量:

wins, skips, lumber, ore = read_db()

返回名为
wins
的变量并不意味着
wins
变量将在您调用的
read_db()
范围内可用。您需要显式地分配返回值

函数(或类)中声明的变量不存在于函数(或类)之外。这是为了让不同的变量在不同的上下文中做不同的事情时可以使用相同的名称,并且它们不会相互干扰。您也不需要关心在您调用的函数中使用的变量名。这被称为“词汇范围”,它非常有用,所有现代语言都使用它(尽管发明它花了令人惊讶的时间)。但是,这意味着,正如其他人所指出的,如果以后要使用函数的返回值,则需要为其指定名称。函数(或类)中声明的变量不存在于函数(或类)之外。这是为了让不同的变量在不同的上下文中做不同的事情时可以使用相同的名称,并且它们不会相互干扰。您也不需要关心在您调用的函数中使用的变量名。这被称为“词汇范围”,它非常有用,所有现代语言都使用它(尽管发明它花了令人惊讶的时间)。然而,这意味着,正如其他人所指出的,如果您希望以后使用函数的返回值,则需要为它们指定名称。