2 ответа из 2 функций в новую функцию - PullRequest
0 голосов
/ 20 января 2012

В настоящее время я пишу небольшой фрагмент кода, который будет сравнивать этаг для страницы веб-сервера в сохраненном документе с этагом на сервере. Если они отличаются, код будет указывать это. Мой код ниже: -

import httplib

def currentTag():
    f = open('C:/Users/ME/Desktop/document.txt')
    e = f.readline()
    newTag(e)

def newTag(old_etag):
    c = httplib.HTTPConnection('standards.ieee.org')
    c.request('HEAD', '/develop/regauth/oui/oui.txt')
    r = c.getresponse()
    current_etag = r.getheader('etag').replace('"', '')
    compareTag(old_etag, current_etag)

def compareTag(old_etag, current_etag):
    if old_etag == current_etag:
        print "the same"
    else:
        print "different"

if __name__ == '__main__':
    currentTag()

Теперь, просматривая мой код, фактически нет причин передавать 'etag' из метода currentTag() в метод newTag(), учитывая, что ранее существовавший etag не обрабатывается в newTag(). Тем не менее, если я этого не сделаю, как я могу передать два разных значения в compareTag(). Так, например, при определении compareTag(), как я могу передать 'etag' из метода currentTag() и 'current_etag' из метода newTag()?

Ответы [ 4 ]

4 голосов
/ 20 января 2012

Вы не должны так цеплять вызовы функций, иметь основной блок кода, который вызывает функции последовательно, например:

if __name__ == '__main__':
  currtag = currentTag()
  newtag = newTag()
  compareTag(currtag,newtag)

настроить ваши функции для возврата соответствующих данных

Основная идея функции заключается в том, что она возвращает данные, обычно вы используете функции для некоторой обработки и возврата значения, а не для потока управления.

0 голосов
/ 20 января 2012

вы можете сделать переменные (т.е. etag) глобальными

0 голосов
/ 20 января 2012
def checkTags():
    c = httplib.HTTPConnection('standards.ieee.org')
    c.request('HEAD', '/develop/regauth/oui/oui.txt')
    r = c.getresponse()
    with open('C:/Users/ME/Desktop/document.txt', 'r') as f:
        if f.readline() == r.getheader('etag').replace('"', ''): print "the same"
        else: print "different"
0 голосов
/ 20 января 2012

измените свою основную на:

if __name__ == '__main__':
    compareTag(currentTag(), newTag())

и затем получите currentTag() return e и newTag() return current_etag

...