Команданте ибн Кандела ([info]dervish_candela) wrote,
@ 2009-07-08 12:16:00
Previous Entry  Add to memories!  Tell a Friend  Next Entry
может быть я тупой, но
у меня есть отдельный модуль update, куда при вызове update.update(log) передается соответственно лог.
есть ли какой-нибудь разумный способ передать log калбэку, не делая его глобальным и не запихивая всё это в класс?

def YABA(BlockAcquiredN, BlockAcquiredSize, TotalSize):
    log("downloading: %s x %s of " % (BlockAcquiredSize,BlockAcquiredN,TotalSize))

def Fetch(log):
    log("downloading...")
    urllib.urlretrieve("http://example.com", filename="file", reporthook=YABA)



(2 comments) - (Post a new comment)


[info]ignir
2009-07-09 11:29 pm UTC (link)
Что значит "разумный"? :)

Еще можно нужные колбэки создавать функцией. Например:
def YABA(log):
    def YABA(BlockAcquiredN, BlockAcquiredSize, TotalSize):
        log("downloading: %s x %s of " % (BlockAcquiredSize,BlockAcquiredN,TotalSize))
    return YABA 

urllib.urlretrieve("http://example.com", filename="file", reporthook=YABA(log))

Или добавить log в сигнатуру колбэка и взять готовый велосипед functools.partial.

(Reply to this) (Thread)


[info]dervish_candela
2009-07-10 07:02 am UTC (link)
вот это и значит "разумный" =)

Первое интереснее, т.к. делаешь сам. Второе практичнее и универсальнее.

интеграция всяких новшеств, особенно функциональных, идет в мои отставшие мозги с большим трудом =) я просто перенес определение YABA в Fetch (ну или можно было вляпать лямбду). Чую ещё можно было куда-нить декоратор впихнуть, но не соображу как :)

(Reply to this) (Parent)


(2 comments) - (Post a new comment)

Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…