2011-12-30 2 views
0

Я пишу функцию, которая возьмет параметр и, помимо прочего, сделает словарь. Я хотел бы, чтобы имя слова было основано на имени входного файла. Скажем, входной файл ht равен input.xml, я бы хотел, чтобы название словаря было input. В идеале я хотел бы использовать что-то вроде этого:Определить имя слова в функции

def function(input): 
    for x in y: list(get value) 
    input[:4][key] = [value] 

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

def function(input, dictname): 
    for x in y: list(get value) 
    dictname[key] = [value] 

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


Редактировать


Я в том числе более длинную версию функции я использую, чтобы вы, ребята, можете получить контекст. Это использует модуль BioPython для итерации через XML-файл хитов. Я использую [temp], чтобы удерживать хиты для каждого запроса, а затем создавал словарь для каждого набора запросов/хитов. Я бы хотел, чтобы этот словарь назывался так же, как и мой входной файл.

from Bio.Blast import NCBIXML 

def make_blast_dictionary(blastxml, maxhits, blastdict): 
    temp=[] 
    for record in NCBIXML.parse(open(blastxml):  
     for number, align in enumerate(record.alignments): 
      if number == int(maxhits): break 
      temp.append(str(align.title).split("|")[1]) 
    blastdict[str(record.query_id)] = [temp] 
+1

Честно говоря, это не имеет большого смысла для меня. Почему бы просто не вернуть словарь из вашей функции? – Xion

+0

Как называется словарь? Вы имеете в виду имя переменной? Если да, что вы пытаетесь сделать? –

+1

Пожалуйста, перепишите свой вопрос с большей ясностью. –

ответ

4

Дело в названных переменных заключается в том, что вы можете называть их любыми, как вам нравится. Лучше назвать их конкретными для контекста, с которым вы их используете.

Лучше всего перейти на словарь вместо вашего слова.

-1
def make_name(input): 
    return = input.split('.')[0] 

def function(input): 
    """Note: this function is incomplete and assumes additional parameters are in your original script 
    """ 
    for x in y: list(get value) 
     dict_name[key] = [value] 
    return dict_name 

def make_dict(input): 
    dict_name = make_name(input) 
    dict_name = {} 
    dict_name = function(input) 
    return dict_name 

Это то, что вам нужно?

1

остальных респондентов законно обеспокоены почему вы хотели бы сделать это, или вы должны сделать это. Это, как говорится, вот как вы могли бы сделать это:

import os.path 

def function(filename): 
    d = {'red': 10, 'blue': 20} 
    name, ext = os.path.splitext(filename) 
    globals()[name] = d 

function('input.xml') 
print input 
+0

вы также должны убедиться, что имя файла не начинается с числа. – Rotem

+0

@Rotem Приведенный выше код по-прежнему работает с именем, начинающимся с числа. Динамически созданные имена, как правило, также ищутся динамически (если вы знали имя заранее, которое вы могли бы назначить напрямую). –

+0

Это круто, не знал, что вы можете динамически назначать другое недопустимое имя, спасибо. – Rotem

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