Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 14, 2010 19:20:49

st01en
От:
Зарегистрирован: 2010-09-14
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Как присвоить переменным несколько элементов кортежа(не все)

Прошу прощение если название топика не совсем отображает то, что хочу сделать.

Есть в модуле 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 его там не устраивает, что и понятно в общем то. Но должен же быть в таком красивом языке, какой-то красивый способ, что б реализовать это.

Еще раз прошу прощения если немного сумбурно описал.



Офлайн

#2 Сен. 14, 2010 19:42:25

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Как присвоить переменным несколько элементов кортежа(не все)

 dsname, dsval = rrdtool.fetch(file, 'AVERAGE', '-s -600', '-e -600')[1:3]



Офлайн

#3 Сен. 14, 2010 19:51:01

st01en
От:
Зарегистрирован: 2010-09-14
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Как присвоить переменным несколько элементов кортежа(не все)

sp3, благодарю, то что нужно.



Офлайн

#4 Сен. 14, 2010 21:01:09

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Как присвоить переменным несколько элементов кортежа(не все)

Если уж по питоновски, то скорее
_, dsname, dsval = rrdtool.fetch(file, ‘AVERAGE’, ‘-s -600’, ‘-e -600’)
Просто подставляйте _ там, где вам значение не требуется.



Офлайн

#5 Сен. 14, 2010 22:01:51

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

Как присвоить переменным несколько элементов кортежа(не все)

Андрей Светлов, а если будет возвращаться ссылка на тяжелый объект? Получится что он так и будет висеть в памяти, после того как мы свяжем его с переменной _.

ЗЫ И вообще почему это питоновский путь? :) Я знаю, что в прологе ‘_’ обозначает анонимную переменную, а тут это откуда?



Офлайн

#6 Сен. 14, 2010 22:10:22

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Как присвоить переменным несколько элементов кортежа(не все)

Будет висеть до выхода из фрейма или нового присваивания - это да.
Просто посмотрите исходники существующих библиотек - так часто делают.
_ - обычная переменная. Можете назвать ее unused или как вам больше нравится.
По сути, достоинство только одно - так легче читать код.

Впрочем, “не нравится - не ешь!”



Офлайн

#7 Сен. 14, 2010 23:30:57

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Как присвоить переменным несколько элементов кортежа(не все)

Zubchick
а если будет возвращаться ссылка на тяжелый объект?
Если есть возможность того, что там может быть тяжёлый объект, то всё не сильно сложнее…
_, dsname, dsval = rrdtool.fetch(file, 'AVERAGE', '-s -600', '-e -600')
del _
А можно и gc скормить…



Офлайн

#8 Сен. 24, 2010 14:09:46

st01en
От:
Зарегистрирован: 2010-09-14
Сообщения: 20
Репутация: +  0  -
Профиль   Отправить e-mail  

Как присвоить переменным несколько элементов кортежа(не все)

Вывод :)
В общем, если нужные элементы идут в определенном порядке (мой случай например) - то пожалуй лучше сделать так, как предложил sp3, дабы не вводить лишних переменных, занимающих лишнюю память.
Если же необходимые элементы разбросаны по всему объекту без определенного порядка, то, по совету Андрея Светлова, будем использовать временную переменную _, которую, как подсказывает ZZZ, можно тут же удалить дабы освободить память.

Всем спасибо.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version