*[iter(sequence)]*group_by
import sqlite3
def test_db(db):
try:
db_cursor = db.cursor()
db_cursor.execute("CREATE TABLE IF NOT EXISTS users (login TEXT, password TEXT)")
db.commit()
return True
except DBError: # тут надо правильную ошибку правильно обрабатывать, я не копался, какую именно и как
return False
def add_user_into_db(db, login, password):
if test_db(db):
добавить_пользователя(login, password)
def select_from_db(db, sel):
if test_db(db):
return список_пользователей(sel)
if __name__ == '__main__':
login = 'my_login'
password = 'my_password'
sel = 'string_for_select'
with sqlite3.connect('users_base.db') as db:
add_user_into_db(db=db, login=login, password=password)
print(select_from_db(db=db, sel=sel))
stone.top, stone.bottom, stone.left, stone.right
def hit_stone(ball, stone):
return (stone.left <= ball.x_coord <= stone.right) and (stone.top <= ball.y_coord <= stone.bottom)
Попытался осмыслить-таки это дело.
У меня в голове получалось, если "на пальцах", что у нас есть как-бы таблица, в которой group_by колонок и каждая колонка есть ссылка на одну и ту же итерируемую последовательность a. И мы начинаем выдергивать из нее элементы, при этом метка при каждом выдергивании сдвигается во всех колонках на следующую строку (т.к. это все колонки суть одно и то же), и получается, что следующий элемент выдергивается уже со следующей строки.
Но когда прогнал это дело в дебаггере, получается, что в group на каждом цикле оказывается сразу кортеж из 5 элементов a.
И первый yield выдергивает их из уже готового кортежа. Просто выдергивает и отдает их по-очереди в вывод функции generate. Второй yield просто суммирует этот кортеж и возвращает сумму, туда же, в вывод.
Шаманство, как в group попадает этот готовый кортеж?
Ниччего не понимаю.
P.s. наверно, рано мне это еще разбирать. Пошел дальше Лутца читать, а то меньше полкнижки только проработал и решил, что уже крутой мастер. :/
P.p.s. Как раз, кстати, там и пример с умножением списков попался, вот и практика.