Для достижения минимального ускорения вы можете добавить break
после того, как код найден:
def defineComplicationsFeatures(patient, comp_list):
for i in range(len(comp_list)):
for x in comp_list[i].codes:
if((any(patient.str.startswith(x,na=False)))):
patient[comp_list[i].name]=1 #change 0 to 1 in the
break
return patient
Лучший выбор состоял бы в том, чтобы записать патч к optparse модулю. Тем временем можно выполнить это с немного измененным классом OptionParser. Это не прекрасно, но это получит то, что Вы хотите сделанный.
#!/usr/bin/env python
from optparse import OptionParser, Option, IndentedHelpFormatter
class PosOptionParser(OptionParser):
def format_help(self, formatter=None):
class Positional(object):
def __init__(self, args):
self.option_groups = []
self.option_list = args
positional = Positional(self.positional)
formatter = IndentedHelpFormatter()
formatter.store_option_strings(positional)
output = ['\n', formatter.format_heading("Positional Arguments")]
formatter.indent()
pos_help = [formatter.format_option(opt) for opt in self.positional]
pos_help = [line.replace('--','') for line in pos_help]
output += pos_help
return OptionParser.format_help(self, formatter) + ''.join(output)
def add_positional_argument(self, option):
try:
args = self.positional
except AttributeError:
args = []
args.append(option)
self.positional = args
def set_out(self, out):
self.out = out
def main():
usage = "usage: %prog [options] bar baz"
parser = PosOptionParser(usage)
parser.add_option('-f', '--foo', dest='foo',
help='Enable foo')
parser.add_positional_argument(Option('--bar', action='store_true',
help='The bar positional argument'))
parser.add_positional_argument(Option('--baz', action='store_true',
help='The baz positional argument'))
(options, args) = parser.parse_args()
if len(args) != 2:
parser.error("incorrect number of arguments")
pass
if __name__ == '__main__':
main()
И вывод Вы добираетесь от выполнения этого:
Usage: test.py [options] bar baz
Options:
-h, --help show this help message and exit
-f FOO, --foo=FOO Enable foo
Positional Arguments:
bar The bar positional argument
baz The baz positional argument
Попытайтесь смотреть на argparse. В документации говорится, что она поддерживает аргументы положения и более хорошо выглядящие сообщения справки.
Я интересовался бы чистым решением этого; я не смог придумать тот. OptionParser действительно фокусируется полностью на опциях; это не дает Вам ничего для работы с положением args, насколько я был в состоянии найти.
то, Что я сделал, должно было генерировать список небольших блоков документации для каждого из моих позиционных параметров, с помощью \t
с для получения правильного интервала. Тогда я присоединился к ним с новыми строками и добавил это к строке 'использования', которая передается OptionParser.
Это выглядит хорошо, но это чувствует себя глупым, и конечно что документация заканчивает тем, что появилась выше списка опций. Я не нашел пути вокруг этого, или как сделать любой сложный материал, т.е. данный набор опций описан под описанием для позиционного аргумента, потому что они только относятся к тому аргументу
, я посмотрел на методы исправляющего обезьяну OptionParser, и я помню (это было приблизительно одним годом назад), что это не будет настолько трудно, но я не хотел спускаться по тому пути.
Большая часть текста справки для позиционных параметров напоминает формат, часто используемый в страницах справочника для *поля NIX. Смотрите на , как команда 'CP' документируется . Ваш текст справки должен напомнить это.
Иначе, пока Вы заполняете аргумент "справки" при использовании синтаксического анализатора, документация должна произвести себя.