私は関数の学習を始めたばかりですが、基本的なことは理解していますが、より複雑なスクリプト(以下など)で呼び出す方法はわかりません。Python - 複数の関数を呼び出す(未解決の参照)。グローバル変数を使用する場合
以下のスクリプト例は、MySQLデータベースからフットボール結果を取り出し、CSVに抽出し、CSVからインポートしてHTMLテーブルに配置し、電子メールで送信しようとしています。レポートのテーブルに私が午前問題私は、各関数の出力(例えば、プレミアリーグ、リーグ1、リーグ2)をコンパイルする必要があるということです - 私が使用して達成「レポート」:
参加しているreport = ""
report += htmlpremleague
report += "<br><br>"
report += htmlleagueone
report += "<br><br>"
return report
私はHTMLテーブルとして1つの電子メールですべての結果を送信することができます。私が抱えている問題は、「レポート」がHTMLの場所を特定できないということです。 'htmlpremleague'は関数内にあるためです。しかし、それだけでなく、その機能に他のものがあるので、単にそれを"report += premier_league()"
に置き換えることはできません。理想的には、(a)それを学ぶのは楽しいから機能を働かせたいのですが! (b)それぞれのリーグをそれぞれ単独で運営することができるのはクールだ。プレミアリーグでのみレポートを生成する。以下のサンプルスクリプトはうまく動作しますが、これはレポートのHTML部分がグローバルで機能の外にあるためです。理想的には私はそれらを内側にしたいので、私は上記を達成することができます。
私はここに来て、ガイドラインに固執しようとしましたが、何か間違ったことがあった場合は教えてください。繰り返すには、所望の出力は、すべてがコール可能な関数内にあることである。代わりに、私は 'レポート' /各テーブルをグローバル変数として配置しますか?
def league_one():
query = "SELECT footballteam as ftt, goals, points FROM
footballdbl_league_one plfdb ORDER BY point desc"
leagueonecursor.execute(query)
leagueonerows = leagueonecursor.fetchall()
with open('league_one.csv', 'wb') as file2:
wr = csv.writer(file2, quoting=csv.QUOTE_ALL)
wr.writerow(["Team", "Goals", "Points"])
wr.writerows(leagueonerows)
print ("csv2 created")
textleagueone = """
"""
htmlleagueone = """
<html><body><p><u><h3><b>Highest Run Time</b></h3></u></p>
{table2}
<br><br>
</body></html>
"""
with open('league_one.csv') as input_file2:
reader = csv.reader(input_file2)
leagueonereader = list(reader)
textleagueone =
textleagueone.format(table2=tabulate(leagueonereader,
headers="firstrow", tablefmt="grid"))
htmlleagueone =
htmlleagueone.format(table2=tabulate(leagueonereader,
headers="firstrow", tablefmt="html"))
/メイン例サッカースクリプト:
con = pymysql.connect(user='',password='',host='',database='')
cursor = con.cursor()
# probably not necessary
premleaguecursor = con.cursor()
leagueonecursor = con.cursor()
def premier_league():
query = "SELECT footballteam as ftt, goals, points FROM footballdbl_prem_league plfdb ORDER BY point desc"
premleaguecursor.execute(query)
premleaguerows = premleaguecursor.fetchall()
with open('prem_league.csv', 'wb') as file1:
wr = csv.writer(file1, quoting=csv.QUOTE_ALL)
wr.writerow(["Team", "Goals", "Points"])
wr.writerows(premleaguerows)
print ("premier league csv created")
textpremleague = """
"""
htmlpremleague = """
<html><body><p><font size="+1"><u><h3><b>Premier League</b></h3></u></font></p>
{table1}
</body></html>
"""
with open('prem_league.csv') as input_file1:
reader = csv.reader(input_file1)
premleaguereader = list(reader)
textpremleague = textpremleague.format(table1=tabulate(premleaguereader, headers="firstrow", tablefmt="grid"))
htmlpremleague = htmlpremleague.format(table1=tabulate(premleaguereader, headers="firstrow", tablefmt="html"))
def league_one():
query = "SELECT footballteam as ftt, goals, points FROM footballdbl_league_one plfdb ORDER BY point desc"
leagueonecursor.execute(query)
leagueonerows = leagueonecursor.fetchall()
with open('league_one.csv', 'wb') as file2:
wr = csv.writer(file2, quoting=csv.QUOTE_ALL)
wr.writerow(["Team", "Goals", "Points"])
wr.writerows(leagueonerows)
print ("csv2 created")
textleagueone = """
"""
htmlleagueone = """
<html><body><p><u><h3><b>Highest Run Time</b></h3></u></p>
{table2}
<br><br>
</body></html>
"""
with open('league_one.csv') as input_file2:
reader = csv.reader(input_file2)
leagueonereader = list(reader)
textleagueone = textleagueone.format(table2=tabulate(leagueonereader, headers="firstrow", tablefmt="grid"))
htmlleagueone = htmlleagueone.format(table2=tabulate(leagueonereader, headers="firstrow", tablefmt="html"))
# def league_two():
# def league_three():
def report():
report = ""
report += htmlpremleague
report += "<br><br>"
report += htmlleagueone
report += "<br><br>"
return report
def send_email():
report()
me = ''
password = ''
server = ''
you = ''
message = MIMEMultipart(
"alternative", None, [MIMEText(report, 'html')])
message['Subject'] = "FOOTBALL REPORT"
message['From'] = me
message['To'] = you
server = smtplib.SMTP(server)
server.ehlo()
server.starttls()
server.login(me, password)
server.sendmail(me, you, message.as_string())
server.quit()
def main():
premier_league()
league_one()
report()
send_email()
質問 - 少し長いけれども - 多分代わりにすべてのコードを貼り付けるの小さなexapleを構築 - 、最小完全、かつ検証例を作成する[方法を参照してください](https://stackoverflow.com/help/mcve) –