Новичок Python Question о кортежах

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

run_forever() ->
    Output = os:cmd("curl -v -k -X POST 'https://localhost:8243/raspberrypi/1.0.0/device/vf98e6a7atyp/bulb?state=on' -H 'accept: application/json' -H 'Authorization: Bearer 38180797-3181-3839-900d-bdaf259f056a'"),
    io:format("Output from command:~n~s~n", [Output]),
    %% Don't want to repeat too quickly!  Sleep for five seconds
    timer:sleep(5000),
    run_forever().

Итак, эта функция что-то делает, а затем вызывает себя в конце. В некоторых других языках вы бы беспокоились о бесконечном росте стека вызовов, но в Erlang есть нечто, называемое «оптимизация хвостового вызова», что означает, что если последнее, что делает функция, это вызывает другую функцию (возможно, саму себя), то стек фрейм текущей функции просто заменяется на фрейм вызываемой функции, а размер стека остается неизменным.

5
задан m0j0 19 November 2008 в 22:54
поделиться

3 ответа

error, = exc.args

Это - случай распаковки последовательности.

Более читаемый способ записать то же и стиль, который я лично одобряю:

[error] = exc.args

Существует два бита, требуемые понять предыдущий пример:

  1. Когда левая сторона присвоения является рекурсивной последовательностью имен, значение правой стороны должно быть последовательностью с той же длиной, и каждый объект значения RHS присвоен соответствующему имени в LHS.
  2. Кортеж с одним объектом в Python записан (foo,). В большинстве контекстов может быть опущена круглая скобка. В частности, они могут быть опущены рядом с оператором присваивания.
10
ответ дан 18 December 2019 в 08:32
поделиться

Запятая служит для распаковки кортежа, т.е. это извлекает единственный объект кортежа и связывает его с error. Без запятой Вы связали бы сам кортеж, а не его содержание.

4
ответ дан 18 December 2019 в 08:32
поделиться

http://www.python.org/doc/2.5.2/tut/node7.html

Ищите "распаковку последовательности" в разделе 5.3.

5
ответ дан 18 December 2019 в 08:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: