Pull to refresh

Comments 23

UFO just landed and posted this here
Бальзам на душу! Спасибо.
Ждем следующую часть, хочется чего-нибудь посложней, какой-нибудь особенной магии Python. Из этой статьи, почти все используется ежедневно. Про locals() узнал в Django, только вот использовать его постоянно — не круто.
Есть замечательная книжка Саммерфилд'а yfpsdftncz Программирование на Python 3. Там есть все эти тонкости + еще огромная куча всего интересного. Книга включает в себя описание всего стандарта питона последней версии, так что советую полистать хотя бы тем кто этим занимается)
Книжку большая, долго читать. А тут раз в неделю принял пилюлю знаний — немного поумнел.
в чем то вы правы, но я думаю понимаете что если хочешь овладеть всеми возможностями языка то хочется читать материал который рассказывает обо всем и вся что касается языка, то есть я хочу сказать что прочитав статью вы не станете ближе к гуру питона а прочитав книгу станете. И книга не такая уж и большая, читается за 3-4 дня.
Хотя обычно мы говорим «переменные» в Python (потому что это общепризнанная терминология), мы в действительности имеем в виду «имена» или «идентификаторы». В Python «переменные» — это ссылки на значения, а не именованные ячейки.

Во многих языках есть возможность управлять этим поведением, т.е. передавать переменные либо по ссылке, либо по значению. В питоне переменная содержащая, например, объект типа int по-умолчанию будет передана по значению, а переменная содержащая объект типа list — по ссылке. В данном случае мне не понятны мысли автора о том, что работа с переменными в питоне как-то принципиально отличается в сравнении с другими языками.
Не могу утверждать, но, возможно, автор вскользь говорит о внутренних механизмах интерпретатора Python. Я вижу так, в примере:
= b = 1
= 2
print b
во второй строке «содается новый объект» типа int и назначается ссылка на него. Да, для пользователя в конечном счете это выглядит как работа с переменными по значению. Но с точки зрения «в Python все имена — объекты» для единообразия нужно считать, что присвоение числа создает новый полноценный объект, доступный по адресу-ссылке, со всеми доступными классу int методами и свойствами.
Приняв к сведению такую «идиому», можно прийти к выводу, что в Python нет необходимости, как таковой, управлять способом передачи значений: по ссылке или по значению.
> В питоне переменная содержащая, например, объект типа int по-умолчанию будет передана по значению, а переменная содержащая объект типа list — по ссылке.

Нет. В питоне всё ссылки, даже int. В питоне есть различие только в mutable/immutable'ности объектов…
Да, всё ссылки. Методы неизменяемых объектов (например string'ов) возвращают новые экземпляры этих классов.
Нет. В питоне всё ссылки, даже int.

Т.е. вы утверждаете, что:
a = b = 1
b = 2
print a

выведет 2? Если нет, то что это если не передача по значению?
Дабы не вызывать споров о терминах уточню: под «передачей объекта по значению» я понимаю «создание копии исходного объекта и передачи ссылки на него»
Я это не утверждаю. Ваш пример не имеет отношения к «передаче по значению».

Есть объект int со значением 1 и на него две ссылки «a» и «b». Cледом создается объект int со значением 2 и в «b» помещается ссылка на него.

Если вы вместо 1 и 2 сделаете список или любой другой объект, то будет тоже самое.
Вы правы. Это я что-то каких-то глупостей понаписал.
Извините, промахнулся, мышой, минус ткнул. Компенсировал кармой.
Полезный пост, спасибо. Я хоть и нуб в питоне, но то что тут описано:
Значения параметров по умолчанию
очень не очевидно.
там у вас знак копирайта образовался, попробуйте написать (с )
Исправил, спасибо.
Еще бы с таблицами придумать чего. В оригинале они без бордеров, атрибут <table border="0"> не очень помог.
Хоть бы ширину колонок подправить, чтобы картинки постройнее смотрелись.
Спасибо за locals в форматировании строк. Действительно удобно
«вы можете захотеть использовать» — неудачный англицизм. Лучше «вам может потребоваться», ну или просто «можно использзовать»
> Заметили избыточность?

Эм, нет. В чем избыточность в использовании values?
Ну как же? Создается промежуточный словарь, в элементы которого копируются значения уже определенных объектов-переменных. Одни и те же значения таким образом дублируются в памяти.
Sign up to leave a comment.

Articles