2012-01-19 1 views
0

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

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()?

+0

Как ваш код в настоящее время структурирована, нет причин для использования трех отдельных функций. И поскольку эти функции ничего не возвращают или не используются повторно, я не уверен, почему вы не просто делаете это процедурно. – Wilduck

+0

Спасибо @Wilduck. У меня создалось впечатление, что более «Pythonistic» отделяет ваш код от меньших функций, чем длинная строка кода в одной функции. – thefragileomen

+0

@ thefragileomen: Разделительный код - так, как вы его отделили - на самом деле это не очень разумно. Эти функции не имеют никакого независимого значения и не могут быть легко использованы повторно. Цель не «меньше». Цель «значимая». –

ответ

4

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

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

настроить функции вернуть соответствующие данные

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

+0

+1 но я бы поставил все эти функции –

0

изменить ваш главный на:

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

и затем currentTag() возврата е и newTag() возврата current_etag

0
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

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

Смежные вопросы