2017-11-16 2 views
0

저는 방금 함수를 배우기 시작했고 기본을 이해합니다. 그러나보다 복잡한 스크립트 (예 : 아래)에서 호출하는 방법을 이해하지 못합니다.파이썬 - 여러 함수 호출하기 (미해결 참조). 전역 변수를 사용하는 경우?

아래 예제 스크립트는 MySQL 데이터베이스에서 축구 결과를 가져 와서 CSV로 추출한 다음 CSV에서 가져 와서 HTML 테이블에 넣고 전자 메일로 보내려고합니다. 어느 합류

report = "" 
report += htmlpremleague 
report += "<br><br>" 
report += htmlleagueone 
report += "<br><br>" 
return report 

: 나는 '보고서'를 사용하여 달성 할 - 난 데 문제는 내가 (예 : 프리미어 리그, 리그 하나, 리그 2) 보고서 테이블에 각 기능의 출력을 컴파일 할 필요가 있다는 것입니다 테이블 그래서 나는 하나의 이메일에 HTML 테이블로 모든 결과를 보낼 수 있습니다. 내가 겪고있는 문제는 '보고서'가 HTML을 찾을 수 없다는 것입니다. 'htmlpremleague'는 함수에 있기 때문입니다. 하지만 그 기능에 다른 것들이 있기 때문에 단순히 html이 아닌 "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() 
+0

질문 - 비트 긴하지만 - 아마도 대신 모든 코드를 붙여의 작은 exaple를 구성 - A, 최소 완료하고 검증 가능한 예제를 만드는 방법 [참조 ] (https://stackoverflow.com/help/mcve) –

답변

0

단순히 당신이 당신의 def에 필요한 데이터 제공 - 나는 목록으로 그것을 선택을, 당신은 또한이 def report2(myOne, myTwo): ...과 같은 serarately를 전달할 수 report2(one,two)이라고 부르십시오 -이를 위해 전역 변수를 사용할 필요가 없습니다.

def leageOne(): 
    # do stuff 
    stuff = "MyLeageOneResult" 
    return stuff 

def leageTwo(): 
    # do otherstuff 
    otherstuff = "MyOtherResult" 
    return otherstuff 

def report(myInputList): 
    return '<br/>'.join(myInputList) 


one = leageOne() 
two = leageTwo() 

email = report([one , two]) 

print email 

출력 : 세부의 많은

MyLeageOneResult<br/>MyOtherResult 
관련 문제