2015-11-20 2 views
2

Я хотел бы использовать функцию таким же именем из разных пакетов в зависимости от функции флага:условное соотнесение пакетов Python: UnboundLocalError

import chainer.functions as F 
def random_q_z(input, test = False): 
    if test: 
     F = np 
     # ... 
    else: 
     # ... 
     pass 

    return F.sum(input) 

Однако переводчик протестует:

UnboundLocalError: local variable 'F' referenced before assignment

Как угодить ему и делать условные ссылки на пакеты?


Я вижу, что этот вопрос относится к другим вопросам на переменных областях, но здесь речь идет о том, как обрабатывать различную область применения. И ответ, который я получил, ценен для этого конкретного вопроса.

+0

Я не понимаю, что должно делать 'F = np', но эта проблема является проблемой. Если у вас есть переменная только для чтения в функции (она просто использует значение из более высокой области), вы можете это сделать. Однако _reassigning_ он в теле функции делает его локальным, и поскольку он вызывается независимо, но только определен (локально) в ветке 'if', вы получаете эту ошибку. –

ответ

2

Сделать F параметр по умолчанию:

import chainer.functions as F 

def random_q_z(input, test=False, F=F): 
    if test: 
     F = np 

    return F.sum(input) 

Если вы не предоставите F в качестве аргумента при вызове random_q_z, chainer.functions используется. Вы также можете дать random_q_z другую функцию для F.

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