2015-05-11 3 views
0

У меня есть следующий код внутри функции Python:Как избежать переопределения функции (PEP8 ошибки F811)

strings = ('TIRS10', 'TIRS11') 
if any(string in fields for string in strings): 

    def transform(row): 
     ''' 
     Transform an input row in to a named tuple, then feed it in to a 
     dictionary. 
     ''' 
     # split row in elements 
     elements = row.split('|') 

     # key: 1st column, replace 
     key = replace_dot_comma_space(elements[0]) 

     # namedtuple 
     ect = namedtuple(key, [fields[0], fields[1]]) 

     # feed namedtuples 
     ect.TIRS10 = is_number(elements[1]) 
     ect.TIRS11 = is_number(elements[2]) 

     # feed dictionary 
     dictionary[key] = dictionary.get(key, ect) 

strings = ('b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7') 
if any(string in fields for string in strings): 

    def transform(row): 
     ''' 
     Transform an input row in to a named tuple, then feed it in to a 
     dictionary. 
     ''' 
     # split row in elements 
     elements = row.split('|') 

     # key: 1st column, replace 
     key = replace_dot_comma_space(elements[0]) 

     # *** small modification for the CWV field *** 
     fields[0] = 'cwv' 

     # named tuples 
     cwv = namedtuple(key, 
         [replace_dot_comma_space(fields[0]), 
          replace_dot_comma_space(fields[1]), 
          replace_dot_comma_space(fields[2]), 
          replace_dot_comma_space(fields[3]), 
          replace_dot_comma_space(fields[4]), 
          replace_dot_comma_space(fields[5]), 
          replace_dot_comma_space(fields[6]), 
          replace_dot_comma_space(fields[7]), 
          replace_dot_comma_space(fields[8]), 
          replace_dot_comma_space(fields[9])]) 

     # feed named tuples 
     cwv.subrange = to_tuple(elements[1]) 
     cwv.b0 = is_number(elements[2]) 
     cwv.b1 = is_number(elements[3]) 
     cwv.b2 = is_number(elements[4]) 
     cwv.b3 = is_number(elements[5]) 
     cwv.b4 = is_number(elements[6]) 
     cwv.b5 = is_number(elements[7]) 
     cwv.b6 = is_number(elements[8]) 
     cwv.b7 = is_number(elements[9]) 
     cwv.rmse = is_number(elements[10]) 
     dictionary[key] = dictionary.get(key, cwv) # feed dictionary 

map(transform, rows) 
return dictionary 

и я получаю за это, переопределением неиспользуемого «преобразование» из строки xxx [F811]. Как я могу решить эту «ошибку», чтобы не использовать две разные функции, но только одну, позже внутри одной и той же функции? Каков правильный подход к такому случаю?

+1

Я думаю, что что-то не так с вашим форматированием. Должны ли последние две строки быть выделенными из одного блока? –

+0

Да, спасибо, что поймали его. –

+0

Этот вопрос больше подходит для StackOverflow. –

ответ

2

Одним из способов является просто назвать их как transform1 и transform2 и положить карту внутри если-то еще:

if condition1: 
    transform = transform1 
else: # if condition2 
    transform = transform2 

map(transform, row) 

Кроме того, это не хорошо, чтобы повторно использовать переменные, такие как строки: это может ввести тонкие ошибки. Также нехорошо менять словарную переменную неявно. Всегда лучше передавать такие вещи явно и возвращать измененные объекты также явно.

Если преобразований больше, чем указано выше, то он регенерирован для объектно-ориентированного стиля, где .transform() - метод класса tirs или b-класса. Тогда словарь будет, естественно, атрибутом, частью состояния класса Transformer, а не глобальным.

+0

Спасибо, звучит практично. Требуется изложение названного кортежа во внешний мир (вне функции/класса). Он предназначен для того, чтобы предоставить пользователю/сценаристу право называть атрибуты объекта, о котором идет речь, с их фактическим именем. Считает ли это объяснение? –

+0

Больше похоже на подход, основанный на данных, а не на ООП. Однако даже в этом случае гораздо лучше быть явным со словарем в качестве аргумента (и результата) для обработки функций, таких как преобразования. И я предполагаю, что качество здесь вызывает беспокойство, потому что в противном случае беспокоиться о предупреждениях о пытках. –

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