Почему локальные переменные внутри вложенных функций не связаны? - PullRequest
0 голосов
/ 06 октября 2018

Может кто-нибудь объяснить, почему локальные переменные, передаваемые в одну и ту же вложенную функцию, дают разные результаты.

Следующая функция import_alignment() включает в себя условный блок if trimref:, который изменяет входные данные и снова вызывает функциюэти новые данные.

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

Я только что понял, что пренебрегал назначением результатов, возвращаемых после второго вызова, связанным переменным.

первоначально import_alignment(modified *args) сейчас ...

sequences, numseqs, refseq, refname = import_alignment(modified *args)

Что делает то, что должно, но я все еще не уверен, почему первая версия не работала.

... подробнее ...

Функция импортирует данные последовательности ДНК из файла Fasta (текстовый файл с> именем и последовательностью на альтернативных строках) и возвращает список последовательностей.вместе с количеством последовательностей, а также именем и последовательностью ссылки без пробелов (первая последовательность в файле).

Сначала вызывается функция numseqs (), которая выполняет базовую проверку качества на входеfile.

Затем он открывает файл, присваивает нечетные строки списку последовательностей (строки 0, 2, 4, ... - имена последовательностей; 1, 3, 5 - последовательности), извлекает имя ссылкии удаляет пробелы ('-') из ссылочной последовательности.

Затем проверяется, является ли trimref == True, если это так, то он собирает имена последовательностей из файла,

`trim_TOref () удаляет ссылкупозиции пробелов из всех последовательностей

output_data() записывает полученный наборбыстрое выравнивание по новому файлу fasta (name_trimmed.fas)

, затем этот файл передается обратно в import_alignment() для извлечения измененных последовательностей

def import_alignment(filename, path, trimref=True):
    """
    this function extracts sequences from a fasta file and does basic QC
    """
    infile = path + filename
    filesize = file_size(infile)
    print("Input path and filename : ",infile)
    print("File Size : {0}".format(filesize))
    numseqs = check_even(infile)
    try:
        with open(infile) as f:
            f.seek(0)
            sequences = pick_lines(f, odds=True)
            refseq = sequences[0].replace("-","")
            f.seek(0)
            refname = f.readline().strip('>\n')
            if trimref:           
                f.seek(0)
                seqnames = pick_lines(f, False)
                sequences = trim_TOref(sequences)
                outfile = filename[0:-4] + "_trimmed"
                output_data(outfile, sequences, outpath = (path + 'output/'), filetype = '.fas', keys = seqnames)
                trimref = False
                sequences, numseqs, refseq, refname = import_alignment((outfile + '.fas'), outpath, trimref)
    except FileNotFoundError:
        print("File not found. Check the path variable and filename")
        exit()
    return sequences, numseqs, refseq, refname
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...