Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 25, 2011 20:49:24

Zyamilon
От:
Зарегистрирован: 2011-11-13
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильное оформление множественного return 'а

о/
есть функция:

def test (arg1, arg2):
...
return data1, data2
Т.е. фукнция должна возвращать 2 типа разных данных.
Запускаю функцию так:
data1, data2 = test(arg1, arg2)
#на что получаю:
Traceback (most recent call last):
#...
ValueError: too many values to unpack (expected 2)
Как ето исправить и сделать правильный “множественный return”?



Офлайн

#2 Дек. 25, 2011 20:54:15

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Правильное оформление множественного return 'а

Это не в этом месте:

def a():
return 3,4
z,b=a()
Мой код работает



Офлайн

#3 Дек. 25, 2011 20:55:57

Zyamilon
От:
Зарегистрирован: 2011-11-13
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильное оформление множественного return 'а

doza_and
Это не в этом месте:
В смысле? :О



Офлайн

#4 Дек. 25, 2011 20:56:04

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

Правильное оформление множественного return 'а

У меня работает на Jython.

>>> def test(a1, a2):
... return a1, a2
...
>>> a, b = test(1, 2)
>>> a
1
>>> b
2



Офлайн

#5 Дек. 25, 2011 20:59:56

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Правильное оформление множественного return 'а

В смысле ошибка не относится к тому как вы значения возвращаете она где то в другом месте



Офлайн

#6 Дек. 25, 2011 21:03:43

Zyamilon
От:
Зарегистрирован: 2011-11-13
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильное оформление множественного return 'а

Опаньки! А я то уж думал у меня какой-то не правильный пчелы питон.
Оказывается, я банально перепутал функции… 2 часа ночи. Но с этим были проблемы до этого, так что информация всё равно полезна.

Задам сразу тогда еще вопрос:
я вот парсер пишу, который составляет из полученных данных много-много html-страниц и таблиц. Кол-во вода скоро перевалит за 1500 строк. И есть проблемы с не то чтобы читабельностью кода, скорее он выглядит не красиво из-за малого кол-ва отступов.
Есть ли в питоне какая-нибудь такая заглушка, чтобы можно было лишний раз ставить отступы, как бы отделяя блоки кода один от другого?
Думаю использовать уже что-то вроде
“if 1 == 1:”
.
з.ы. отступ = 4 пробела или табуляция в моем понимании



Отредактировано (Дек. 25, 2011 21:05:43)

Офлайн

#7 Дек. 25, 2011 21:06:17

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

Правильное оформление множественного return 'а

Может быть выделять часть кода в отдельные функции/методы?



Офлайн

#8 Дек. 25, 2011 21:08:03

Zyamilon
От:
Зарегистрирован: 2011-11-13
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильное оформление множественного return 'а

Soteric
Может быть выделять часть кода в отдельные функции/методы?
Итак выделены. Даже один модуль есть. Но этого всё равно мало, т.к. функции длинные.
Парсинг табличной верстки дело такое, сами понимаете… Черт ногу сломит в многократных вложениях таблиц в таблицы.



Офлайн

#9 Дек. 25, 2011 21:09:29

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

Правильное оформление множественного return 'а

Думаю если вы покажете код, то вам смогут дать более практичные советы.



Офлайн

#10 Дек. 25, 2011 21:18:40

Zyamilon
От:
Зарегистрирован: 2011-11-13
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Правильное оформление множественного return 'а

def build_template_from_original(filename_orig):
"""Открывает файл, выдирает основную таблицу ->> каркас новой страницы"""
#начинаем работу:
html_code = None
html_code = urllib.request.URLopener.open_local_file\
(html_code, filename_orig).read()
tree = html.fromstring(html_code.decode('utf-8'))
tree.getroottree()
#
title = tree.xpath('/html/head/title//text()')[0]
main_table = etree.Element('table')
main_table.set('clasS', 'maintable')
main_table.append(tree.xpath('/html/body/table/tr[2]/td/table/tr/td[2]')[0])
del tree, html_code

#создаем чистый html:
new_html = etree.Element('html')
head = etree.SubElement(new_html, 'head')
body = etree.SubElement(new_html, 'body')

#заполняем мета-теги:
meta_charset = etree.SubElement(head, 'meta', content='text/html; charset=utf-8')
meta_charset.set('http-equiv', 'Content-Type')
meta_title = etree.SubElement(head, 'title')
meta_title.text = title

#заполняем тело:
div_menu = etree.SubElement(body, 'div', clasS='menu')
div_header = etree.SubElement(body, 'div', clasS='header')

#блок описания:
div_content_description = etree.SubElement(body, 'div', clasS='content_description')

#добавляем оригинальную таблицу:
div_content_parsed = etree.SubElement(body, 'div', clasS='content_parsed')
div_content_orig = etree.SubElement(body, 'div', clasS='content_orig')
div_content_orig.append(main_table)

#заголовок страницы:
h1 = div_content_orig.xpath('./table/td/h1[@class="pTitle"]')[0]
div_header.append(h1)

#нафигация:
p_navy = div_content_orig.xpath('./table/td/p[2]')[0]
div_header.append(p_navy)

#результат:
new_html = etree.tounicode(new_html, method='html', pretty_print=False)
return new_html
#-------------------------------------------------------------------------------
Средней (по моим меркам) длины функция. И еще не самый ужас парсинга табличной верстки.
Некоторые куски бы оформить как отдельные блоки… Но я без понятия как это правильно сделать.

Апд: знаю что код в некоторых строках > 80 символов. Но если делать переносы, получается вообще мешанина и ущербность.



Отредактировано (Дек. 25, 2011 21:22:24)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version