Найти - Пользователи
Полная версия: Оптимизация кода
Начало » Python для новичков » Оптимизация кода
1
own777
Привет!


Имеется код состоящий из Н блоков ( ниже пример для 5 блоков)

# ANM conformer 1
conformer1 = parsePDB('./conf_pr/output0.pdb', model=1, subset='calpha')
anm = ANM('b2ar 1')
anm.buildHessian(conformer1, cutoff=8.0)
anm.calcModes(100)
writeNMD('b2ar_anm1.nmd', anm[:10], conformer1)
# ANM conformer 2
conformer2 = parsePDB('./conf_pr/output1.pdb', model=1, subset='calpha')
anm2 = ANM('b2ar 2')
anm2.buildHessian(conformer2, cutoff=8.0)
anm2.calcModes(100)
writeNMD('b2ar_anm2.nmd', anm2[:10], conformer2)
# ANM conformer 3
conformer3 = parsePDB('./conf_pr/output2.pdb', model=1, subset='calpha')
anm3 = ANM('b2ar 3')
anm3.buildHessian(conformer3, cutoff=8.0)
anm3.calcModes(100)
writeNMD('b2ar_anm3.nmd', anm3[:10], conformer3)
# ANM conformer 4
conformer4 = parsePDB('./conf_pr/output3.pdb', model=1, subset='calpha')
anm4 = ANM('b2ar 4')
anm4.buildHessian(conformer4, cutoff=8.0)
anm4.calcModes(100)
writeNMD('b2ar_anm4.nmd', anm4[:10], conformer4)
# ANM conformer 5
conformer5 = parsePDB('./conf_pr/output4.pdb', model=1, subset='calpha')
anm5 = ANM('b2ar 5')
anm5.buildHessian(conformer5, cutoff=8.0)
anm5.calcModes(100)
writeNMD('b2ar_anm5.nmd', anm5[:10], conformer5)


Как видно, в каждом блоке отличие только цифра перед b2ar conformer и anm ( это число блока, N), а так же в output4.pdb ( тут число N-1 )

требуется сократить этот скрипт до минимума сделать так, чтобы N указывалось только один раз в петле.
4kpt
Я не понимаю Вашей задачи, но проще всего использовать встроенную инструкцию exec…
Хотя можно реализовать в виде списка или словаря, но это более хлопотно…
reclosedev
Странный код и вопрос. Если conformer и anm дальше не используются:
for i in range(5):
    conformer = parsePDB('./conf_pr/output%s.pdb' % i, model=1, subset='calpha')
    n = i + 1
    anm = ANM('b2ar %s' % n)
    anm.buildHessian(conformer, cutoff=8.0)
    anm.calcModes(100)
    writeNMD('b2ar_anm%s.nmd' % n, anm, conformer)
если используются, то завести список или словарь, или поменять логику. exec - для совсем крайних случаев.
4kpt
reclosedev
Да я навскидку… Сам не рискую его использовать. Только для вызова функций по именам, которые предварительно передаются как строки.
4kpt
reclosedev
Кстати. Я считаю, что страшного ничего не случится (при использовании инструкции exec), если код не вынимается извне, а Вы сами его создаете в программе (ну как в данном случае).

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB