Найти - Пользователи
Полная версия: Как присвоить переменным несколько элементов кортежа(не все)
Начало » Python для новичков » Как присвоить переменным несколько элементов кортежа(не все)
1
st01en
Прошу прощение если название топика не совсем отображает то, что хочу сделать.

Есть в модуле rrdtool функция fetch, которая возвращает кортеж, мне нужно переменным присвоить второй и третий элемент этого кортежа

пример выполения этой ф-ции:
>>> rrdtool.fetch(file, 'AVERAGE', '-s -600', '-e -600')
((1284480000, 1284480300, 300), ('traffic_in', 'traffic_out'), [(424.59491623981006, 107.09591691759539)])
Сейчас это реализовано так:
rrdfetch = rrdtool.fetch(file, 'AVERAGE', '-s -600', '-e -600')
dsname = rrdfetch[1]
dsval = rrdfetch[2]
В приципе это работает, но может как-то более по “питонскому” это сделать можно, что-то типа такого:
None, dsname, dsval = rrdtool.fetch(file, 'AVERAGE', '-s -600', '-e -600')
пример выше понятное дело не работает, None его там не устраивает, что и понятно в общем то. Но должен же быть в таком красивом языке, какой-то красивый способ, что б реализовать это.

Еще раз прошу прощения если немного сумбурно описал.
sp3
 dsname, dsval = rrdtool.fetch(file, 'AVERAGE', '-s -600', '-e -600')[1:3]
st01en
sp3, благодарю, то что нужно.
Андрей Светлов
Если уж по питоновски, то скорее
_, dsname, dsval = rrdtool.fetch(file, ‘AVERAGE’, ‘-s -600’, ‘-e -600’)
Просто подставляйте _ там, где вам значение не требуется.
Zubchick
Андрей Светлов, а если будет возвращаться ссылка на тяжелый объект? Получится что он так и будет висеть в памяти, после того как мы свяжем его с переменной _.

ЗЫ И вообще почему это питоновский путь? :) Я знаю, что в прологе ‘_’ обозначает анонимную переменную, а тут это откуда?
Андрей Светлов
Будет висеть до выхода из фрейма или нового присваивания - это да.
Просто посмотрите исходники существующих библиотек - так часто делают.
_ - обычная переменная. Можете назвать ее unused или как вам больше нравится.
По сути, достоинство только одно - так легче читать код.

Впрочем, “не нравится - не ешь!”
ZZZ
Zubchick
а если будет возвращаться ссылка на тяжелый объект?
Если есть возможность того, что там может быть тяжёлый объект, то всё не сильно сложнее…
_, dsname, dsval = rrdtool.fetch(file, 'AVERAGE', '-s -600', '-e -600')
del _
А можно и gc скормить…
st01en
Вывод :)
В общем, если нужные элементы идут в определенном порядке (мой случай например) - то пожалуй лучше сделать так, как предложил sp3, дабы не вводить лишних переменных, занимающих лишнюю память.
Если же необходимые элементы разбросаны по всему объекту без определенного порядка, то, по совету Андрея Светлова, будем использовать временную переменную _, которую, как подсказывает ZZZ, можно тут же удалить дабы освободить память.

Всем спасибо.
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