Пример изменяемых значений аргументов по умолчанию с использованием словаря Python

Понятно почему так происходит, переменная «b» по факту хранит ссылку на список «a». Меняя «b» меняем и значение содержащиеся в «a».

>>> a = [1,2,3]
>>> b = a
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]
>>> b[0] = -1
>>> a
[-1, 2, 3]
>>> b
[-1, 2, 3]


Не хотим этого, делаем как рекомендует документация:

>>> a = [1,2,3]
>>> b = list(a)
>>> a
[1, 2, 3]
>>> b
[1, 2, 3]
>>> b[0] = -1
>>> a
[1, 2, 3]
>>> b
[-1, 2, 3]

Я встал на грабли в такой ситуации:

def func(a, k=[]):
    k.append(a)
    return k

print(func(1))
print(func(2))
print(func(3))

#  вывод
[1]
[1, 2]
[1, 2, 3]

Думал будет выведено:

[1]
[2]
[3]

Правильное решение, если нужно избежать поведения выше описанного:

def func(a, k=None):
    if k == None:
        k = []
    k.append(a)
    return k

print(func(1))
print(func(2))
print(func(3))

#  вывод
[1]
[2]
[3]

Книга -Кафе на краю земли

В основном читаю техническую и бизнес литературу, иногда хочется прочитать, что-то для себя.

Книга Джон П. Стрелеки «Кафе на краю земли» – одна из тех которые я решил прочитать для развлечения. Не надеялся на профит, но получил его ?.

Книга небольшая всего 150 страниц. В ней 3 вопроса, на которые не каждый может ответить просто и честно.

По ходу, чтения возникают другие вопросы, например «Как?».

Книга для меня запоздала на 4 месяца (события в жизни сложились так), за то я почерпнул правильность самостоятельно принятых решений.

Нет серебряной пули, нет книги которая решит все проблемы. Эта книга скорей может дать толчок для начало пути, к осознанию.

Книга относится к мотивационным, много хвалебных отзывов. Но по факту всё зависит от человека, от поступков. Тут нужно ответить честно на вопросы, можно не вставая – глядишь и жизнь начнёт меняться.

В отличии, от книги путь программиста, в который больше рассказывается как, в этой книги обсуждается вопрос зачем?

Python3 и MySQL что установить?

Для работы нужна библиотека mysqlclient. Установка библиотеки mysqlclient для работы с MySQL и Python3 происходит следующим образом (в Debian 9)

sudo apt install python3-dev libsqlclient-dev default-libmysqlclient-dev
python3 -m venv venv
source venv/bin/activate
pip install mysqlclient

В Debian 10 buster и Python3.7 с MySQL (MariaDB)

Я использую библиотеку PyMySQL. Если в проекте используется SQLAlchemy то в SQLALCHEMY_DATABASE_URI mysql://… нужно поменять на mysql+pymysql://…

pip install PyMySQL

Для Python2 использовать старый модуль MySQL-python.