Программирование и научные вычисления на языке Python/§5: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
Нет описания правки
Строка 381:
Передача аргументов командной строке похожа на передачу аргументов функции — значения должны идти в строго определенном порядке, о котором приходится помнить. Было бы неплохо и для командной строки иметь что-то вроде keyword arguments для функций. Эта возможность представляется как пары <tt>-option value</tt>, где под <tt>option</tt> понимается имя аргумента.
 
Чтобы показать как это работает, по обыкновению возьмем школьный пример о нахождении координаты тела, движущегося из начальной координаты ''s<sub>0</sub>'' с начальной скоростью ''v<sub>0</sub>'' и постоянным ускорением ''a'':


<math>s(t) = s_0 + v_0t + \frac{1}{2}at^2</math>.


Эта формула принимает четыре параметра: ''s<sub>0</sub>'', ''v<sub>0</sub>'', ''a'' и ''t''. Мы можем написать программу <tt>location.py</tt>, которая принимает эти параметры и их значения из командной строки:
 
 
Строка 393 ⟶ 399 :
 
 
В Python для этих пар можноимеется использовать стандартныйспециальный модуль ''getopt''. Рецепт его конкретного использования таков:
 
 
Строка 400 ⟶ 406 :
s0 = v0 = 0; a = t = 1
import getopt, sys
options, args = getopt.getopt(sys.argv[1:], '', [’t=', 's0=', 'v0=', 'a='])</source>
 
 
Заметьте, что имена параметров вводятся без двойного дефиса, он является часть синтаксиса. Знак равенства показывает, что параметр предполагает следование за именем значения (без знака равенства применяется только для определения булевых переменных).
 
Получаемый объект <tt>options</tt> представляет собой список двойных кортежей, содержащих пары, полученные в командной строке, например:
 
 
<code>[('--v0', 1.5), ('--t', 0.1), ('--a', 3)]</code>
 
 
В этом случае пользователь задал все параметры, кроме ''s<sub>0</sub>''. Объект <tt>args</tt> возвращает из <tt>getopt.getopt</tt> все оставшиеся аргументы строки, то есть аргументы не являющиеся option value парами. В нашем примере таковых нет. Типичный способ дальнейшей обработки состоит в разделении по именам переменных с помощью базовой конструкции, изученной в начале этого урока и двойному проходу в цикле for:
 
 
<source lang="python">
for option, value in options:
if option == '--t':
t = float(value)
elif option == '--a':
a = float(value)
elif option == '--v0':
v0 = float(value)
elif option == '--s0':
s0 = float(value)</source>