私は自分の関数で何かが間違っていると思っていますが、私はまだ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)
関数(またはクラス)で宣言された変数は、関数(またはクラス)の外には存在しません。これは異なる文脈で異なることをしている異なる変数に同じ名前を使うことができるので、互いに干渉しないでしょう。呼び出す関数で使用される変数名についても気にする必要はありません。これは "レキシカルスコープ"と呼ばれ、非常に便利であり、現代のすべての言語で使用されています(ただし、発明するのに驚くほど時間がかかりましたが)。しかし、これは、後で使用したい場合は、関数の戻り値に名前を割り当てる必要があることを指摘しています。 –