LINUX.ORG.RU

Программирование на Python: Часть 1. Возможности языка и основы синтаксиса

 


0

0

Этот цикл статей предназначен для того, чтобы помочь успешному преодолению «кривой обучения», последовательно предоставляя информацию, начиная с самых базовых принципов языка до его продвинутых возможностей в плане интеграции с другими технологиями. В первой статье речь пойдет об основных возможностях и синтаксисе Python. В дальнейшем мы рассмотрим более сложные аспекты работы с этим популярным языком, в частности объектно- ориентированное программирование на Python.

>>> Подробности

★★★

Проверено: boombick ()

Ответ на: комментарий от yantux

Питон как и С и С++ оставляет массу времени на исправление опечаток, вместо разработки кода.

«разработка кода» Ваша основная цель, да?

shty ★★★★★
()
Ответ на: комментарий от yantux

Я не понимаю синтаксиса и алгоритма этого кода. Разве его нельзя переписать на Паскале? Паскаль - это реально быстрый язык во на всех этапах: от разработки, до отладки.

Я попробую вам объяснить на пальцах (если напутаю, прошу поправить). Этот алгоритм выдаёт список (по вашему --- динамический массив) из кортежей (статических неизменяемых массивов длиною в данном случае 2). Перебор осуществляется по всем от 0 до 99 включительно числам для x и по всем от 0 дл x (невключительно) для y. Пара чисел включается в динамический маасив только, если их сумма нечётна.

Кстати, у меня пример не заработал, т.к. мой Python 2.5 не знает зарезервированного слова odd, пришлось исправить и написать:

[(x, y) for x in xrange(0, 100) for y in xrange(0, x) if (x + y)%2] 
Vudod ★★★★★
()

Педон не нужен.

anonymous
()
Ответ на: комментарий от yantux

Что касается думания, то думать надо ДО написания КОДА, т.е. должен быть ПРОЕКТ, хотя в вашем воображении. А кодить надо на автомате.

Никогда не говорите этого вашему работодателю. Он будет считать вас быдлом. Это точно.

Vudod ★★★★★
()
Ответ на: комментарий от Vudod

> Кстати, у меня пример не заработал, т.к. мой Python 2.5 не знает зарезервированного слова odd, пришлось исправить и написать:

Этот код не реально написать на паскале?

yantux
()
Ответ на: комментарий от Vudod

> И сколько я должен городить на Паскале или на Си? Не говоря уже на Фортране. Кстати, вопрос ещё, какая реализация: паскалевская или питоновская будет тормознее.

На Си и С++ дольше. На паскале думаю быстрее всего.

yantux
()
Ответ на: комментарий от grim

> Есть gtk# для любителей глайда.

а верно, кстате! (позабыл уж)

mkfifo
()
Ответ на: комментарий от Alesh

>

Сортировка с неизвестными заранее условиями?
Как это?

Может, сказал криво. Поясню: есть массив, состоящий из словарей. Есть определенный набор ключей, например 30. Известно, что в каждом словаре присутствует ненулевое количество ключей из набора, каких именно и сколько мы не знаем. Задан алгоритм сортировки, при котором словари в списке надо отсортировать по ключу «А», но если в одном словаре есть ключ А, а в другом нет, поставить словарь с ключом А выше. если в сравниваемых словарях ключа А нет, то по ключу Б, если нет ключа Б, то сравнить некую функцию от ключей Г и Д или Ж и Е и так далее условий дцать. С функцией cmp над реализации долго думать не надо, можно написать и дальше идти.

Gukl ★★★
()
Ответ на: комментарий от Gukl

А конечному пользователю полагается RPM DEB MSI давать. На худой конец setup.exe

Это ж в каких резервациях пользователи качают софт в сорцах? )))))

Linfan ★★★★★
()
Ответ на: комментарий от yantux

Вы либо тролль, либо глупы, а вероятнее всего - и то и то. Оба языка - Тьюринг-полные. Но Python более высокоуровневый, что дает возможность строить на нем абстракции более высокого уровня ценой значительно меньших усилий.

P.S. А тот код, в который вы там «Я не понимаю синтаксиса и алгоритма этого кода.», является практически калькой математической записи операции над множеством общего вида S = { f(x) | x ∈ N , g(x)}, где N - исходное множество, f - вычисляемая функция, g - условие. Так что делайте выводы о своем образовании.

WC
()
Ответ на: комментарий от Gukl

Поясню: есть массив, состоящий из словарей. Есть определенный набор ключей, например 30. Известно, что в каждом словаре присутствует ненулевое количество ключей из набора, каких именно и сколько мы не знаем. Задан алгоритм сортировки, при котором словари в списке надо отсортировать по ключу «А», но если в одном словаре есть ключ А, а в другом нет, поставить словарь с ключом А выше. если в сравниваемых словарях ключа А нет, то по ключу Б, если нет ключа Б, то сравнить некую функцию от ключей Г и Д или Ж и Е и так далее условий дцать. С функцией cmp над реализации долго думать не надо, можно написать и дальше идти.

почему-то вспомнился анекдот: «венчаются, раб божий Василий и... страх божий Наталья» :) зачем так извращаться?

shty ★★★★★
()
Ответ на: комментарий от Gukl

По мойму данный пример решаем написанием своих пусть и навороченных функций key (выборка ключа сортировки) и cmp(сравнение двух ключей сортировки) с дальнейшим их использованием в методе sort(). И это пожалуй будет понятнее и православнее, чем писать что-то своё.

Ну ладно остался вопрос с наездом «Пришлось писать свою сортировку в конце концов. И это в интерпертируемом ЯП, в 21 веке!» ))) Не ужели ты знаешь какой-то «интерпертируемом ЯП», который бы прочитал бы и правильно распарсил твои мысли и с пол-пинка бы отсортировал описанный тобой массивчик? )))

Alesh
()
Ответ на: комментарий от shty

> ... раб божий Василий и... страх божий Наталья ...

+500 А по теме похоже опонент пример на ходу придумал, что бы хорошую мину сделать.

Alesh
()
Ответ на: комментарий от Alesh

С полпинка - неет. Просто с cmp это чуток проще :) В Перле, опять же. Ну я не наезжал в данном случае особо, пишу-то на нем.

Gukl ★★★
()
Ответ на: комментарий от shty

>почему-то вспомнился анекдот: «венчаются, раб божий Василий и... страх божий Наталья» :) зачем так извращаться?

Есть информация о разных людях, неполная, с ошибками, с разной достоверностью. Требуется сортировка по нечеткому критерию, который приблизительно алгоритмизируется таким образом. Сведение к key возможно, но вот это будет настоящее извращение!

Gukl ★★★
()
Ответ на: комментарий от Alesh

>+500 А по теме похоже опонент пример на ходу придумал, что бы хорошую мину сделать.

Кому страх божий, кому любимое дело.

Gukl ★★★
()
Ответ на: комментарий от Gukl

> Просто с cmp это чуток проще :) В Перле, опять же

Наверно ты только начал с питоном возиться. Обычно у тех, кто сделал хотя бы простенький динамический сайтик на питоне, особенно с использованием фреймворков, оформляется в голове конкретная мысль: «перл ненужен, совсем-совсем ненужен». )))

Alesh
()
Ответ на: комментарий от Gukl

> Сведение к key возможно, но вот это будет настоящее извращение!

Ты неправильно понял кеу. В принципе эта функция, которая возвращает «вес сортировки» сложного сортируемого элемента, с которым далее оперирует cmp. Даже если ты сам пишешь тебе все равно надо будет определять «вес сортировки» элемента.

Alesh
()
Ответ на: комментарий от Gukl

Ипануццо пояснение ;-) «Эта задача легко решается введением 11-ти дополнительных плоскостей».

P.S. Это я так, не в обиду (да и не в тему). Просто напомнило стиль множества похожих статей (по программированию в основном), по прочтении которых мозги плавятся. Ещё в книгах по C++ очень любят примеры такие приводить... классы A, B, C, определим a::a и a::b, b::b и b::c и c::a, b::c вызывает c::a... ипануццо можно пока протрейсишь ментально.

queen3 ★★★★★
()
Ответ на: комментарий от Gukl

>зачем так извращаться?

Есть информация о разных людях, неполная, с ошибками, с разной достоверностью. Требуется сортировка по нечеткому критерию, который приблизительно алгоритмизируется таким образом. Сведение к key возможно, но вот это будет настоящее извращение!

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

shty ★★★★★
()
Ответ на: комментарий от queen3

Ещё в книгах по C++ очень любят примеры такие приводить... классы A, B, C, определим a::a и a::b, b::b и b::c и c::a, b::c вызывает c::a... ипануццо можно пока протрейсишь ментально.

заклинаю, не читайте такие книги - это зло :)

shty ★★★★★
()
Ответ на: комментарий от shty

Да я вообще книги по программированию не читаю. Обычно как? Проект есть - ща мы его неделю покурим, и знание языка/технологии у нас в кармане (ещё 65535 вёдер и золотой ключик у нас в кармане ;-) Но просматриваю периодически, да. Вроде бы у Мейерса такие примеры были, а это не такие уж плохие книги, имхо.

А страдающие таким авторы просто не взяли на себя труд придумать что-то удобоваримое, т.к. не однобуквенные классы/методы не в пример проще понять.

queen3 ★★★★★
()
Ответ на: комментарий от Alesh

> А можно узнать, чем была вызвана необходимость писать бота на Питоне, если вы прекрасно знаете чистый Си?

изучал распеаренную хрень

ubuntulover
()
Ответ на: комментарий от shty

> сперва добейся (с) :)

Ты прямо искришь штампами, своего сказать неча?

а ведь и правда не осилил, да? :)

Успокойся, осилил. Если я что-то осилил, это не значит, что я перестаю иметь право критиковать архитектуру. Осилить архитектуру не значит признать её правлиьной и верной, и наоборот.

ubuntulover
()
Ответ на: комментарий от Linfan

> Вообще то считается, что имплементация на Питоне до 10 раз компактнее, нежели аналогичная в плюсах или жабке. Так что быстропечатание увы не в твою пользу.

Это кто так расчитал? У пейтона нету фигурных скобок и не указывается тип - конец. Я поверю в разницу в 2-3 раза. 10 — завышено пейтонофилами. Не говоря уже о том приколе, что у плюсов и жабки большие возможности в виде большего количества либ на любой вкус + большее коммпьюнити, т.е. в каких-то местах пейтонолюбам приходится велосипедить (или писать сидеть врапперы), а это больше кода и времени, (прибавьте сюда более долгое тестирование системы, которая валится в рантайме, а не в статике) т.е. практически, а не теоретически питон даже более жирный.

ubuntulover
()
Ответ на: комментарий от shty

> Да всё впринципе могут, только с интерпретируемыми оно проще, т.к. неинтерпретируемые языки имеют тенденцию «вкомпилировывать» всё раз и навсегда и не париться (выбора тут у них нет). Это не означает что на них нельзя решить задачу динамической генерации форм, просто для этого придётся писать вспомогательный инструмент, между тем как в интерпретериуемых он уже есть.

Для тебя ГУЙ это что, кидание контролов по формам? В статически компилируемом языке можно генерировать какие угодно формы и какие угодно контролы сколь угодно раз и в зависимости от того, чего хочет юзверь. И что за вспомогательный инструмент? Не понимаю. Приведи пример, что ли.

это и «мелкософту» понятно :)

Ну так если это и мелкософту понятно, то вышеуказанная твоя цитата ещё более непонятна. Если ты боишься того, что всё «вкомпилированно» и нельзя поменять — у нас же есть XML-файлы. Внезапно захотелось изменить положение какой-то кнопочки? — открой редактор и отредактируй XML. Я ума не приложу, когда нужны случаи, чтобы пользователь обычной такой программы сам менял гуй да ещё и прикручивал к кнопкам колбеки (т.е. писал какие-то собственные функции) (среды программирования и geek-related софт отбросим в сторону). Всё это решимо XML + записываемые макросы (даже в питоне придётся писать реализацию макросов).

ubuntulover
()
Ответ на: комментарий от dizza

> Питон тебя подталкивал на правильный стиль написания кода, а именно написания тестируемого кода и тестов соответственно.

Ну-ну, то же самое можно сказать про брейнфак. Это не архитектура языка плохая, это он «подталкивает на правильный стиль написания кода» (ошибёшься — и кабздец). Ё-моё, все эти __del__, отступы и прочая — чистой воды КОСТЫЛИ. Пейтон это второй язык после ВизуалБасика, который целиком построен на грязных хаках, где всё это ещё гордо именуется features

ubuntulover
()
Ответ на: комментарий от ubuntulover

>> Вообще то считается, что имплементация на Питоне до 10 раз компактнее, нежели аналогичная в плюсах или жабке. Так что быстропечатание увы не в твою пользу.

Это кто так расчитал?

Насколько я понимаю, это мнение практика.

У пейтона нету фигурных скобок и не указывается тип - конец.

Еще у Питона есть встроенные list comprehensions и generator expressions, а за счет динамической типизации - довольно мощный generic programming. Ну и встроенные типы мощнее плюсовых и жабьих.

Я поверю в разницу в 2-3 раза

<troll>Твое «поверю» - признание того, что ты не разбираешься в предмете спора </troll>

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

У Жабы - да, у Си++ - большой вопрос. Из Питона доступны гигабайты Си-библиотек, и некоторые плюсовые (Qt, например).

P.S. Питон ненавижу, но отдаю ему должное.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Насколько я понимаю, это мнение практика.

Я тоже практик, и такой чудесной разницы не узрел. Алгоритмы всё те же, всякия лямбды благдоаря синтаксису питона делают код ещё более тяжёлым.

<troll>Твое «поверю» - признание того, что ты не разбираешься в предмете спора </troll>

Да, это цепляние к словам :)

Еще у Питона есть встроенные list comprehensions и generator expressions

И используются они, типа, на каждой строке — это чтобы разница была в 10 раз, да? Это всё модные фишечки стянутые с модных ФЯ, но они не так часто используются, чтобы делать такой отрыв.

а за счет динамической типизации - довольно мощный generic programming.

Ну это «просто другой подход». Не лучше, не хуже. В яве мощный «джнерик программинг» засчёт интерфейсов. В цэпэпэ — засчёт шаблонов.

Ну и встроенные типы мощнее плюсовых и жабьих.

Например?

P.S. Питон ненавижу, но отдаю ему должное.

Тоже самое здесь, <troll>есть вещи и похуже типа Руби</troll>

ubuntulover
()

А как на питоне замутить такое:

void foo (int & x , int & y){
    *x += 6;
    *y += 15;
}
// Результат как бэ:

int x = 10, y = 10 ;

foo (x, y);

//итого:

x = 16;
y = 25;

Вроде никак.

Siado ★★★★★
()
Ответ на: комментарий от Gukl

Дык если написать в виде замыкания, и так понятно любому школьнику (по крайней мере, если он алгебру не косил). А с этими вложенными циклами, пожалуй, ещё и комментов придётся писать больше чем кода.

yet_another_anon
()
Ответ на: комментарий от ubuntulover

> сперва добейся (с) :)

Ты прямо искришь штампами, своего сказать неча?

а ведь там смайлик есть, для одарённых :) так и быть, растолкую: сначала напиши библиотеку - потом поговорим, а то чирикать и клопов давить все горазды, так понятнее?

> а ведь и правда не осилил, да? :)

Успокойся, осилил. Если я что-то осилил, это не значит, что я перестаю иметь право критиковать архитектуру.

ололо, так Вы оказывается саму архитектуру (архитектуру! не хрен там какой) критикуете?

а я то, наивный, думал что высказывания вроде:

да и ещё стадантрная библиотека — тупая бессмысленная каша

это сродни «все му#@ки, один я - д'Артаньян»...

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

shty ★★★★★
()
Ответ на: комментарий от ubuntulover

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

теоретик :)

прибавьте сюда более долгое тестирование системы, которая валится в рантайме, а не в статике

ололо, мусью не знает разницы между временем исполнения (пресловутый run-time) и компиляции? идём и учим термины

практически, а не теоретически питон даже более жирный.

уж никак не жирнее тебя :)

shty ★★★★★
()
Ответ на: комментарий от anonymous

Я не настолько хорошо знаю паскаль (если честно, я его вообще не знаю, только троллю им). Но вот на какой-нибудь джаве это будет выглядеть как-нибудь так:

 
public LinkedList array(x){ 
 LinkedList<Tuple<int,int>> list = new LinkedList<Tuple<int,int>>; 
 for(int i=0;i<=x;i++){ 
  for(int j=0; j<=i;j++){ 
   if((i+j)%2==1){ 
    list.add(new Tuple(i,j)); 
   } 
  } 
 } 
 return list; 
} 

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

yet_another_anon
()
Ответ на: комментарий от shty

> а я то, наивный, думал что высказывания вроде:

да и ещё стадантрная библиотека — тупая бессмысленная каша

это сродни «все му#@ки, один я - д'Артаньян».

Всё прекрасно расписано в гуглах. Мне неинтересно разжёвывать каждому

ubuntulover
()
Ответ на: комментарий от ubuntulover

Для тебя ГУЙ это что, кидание контролов по формам?

ога, вместо тетриса развлекаюсь когда делать неча :)

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

кто бы спорил, но не про то сказ

И что за вспомогательный инструмент? Не понимаю. Приведи пример, что ли.

пример (не самый умный, но навскидку): подключается dll/so, априори тебе неизвестная (разработал её Петров из соседней лавочки), надо что бы при загрузке модуля к нему сгенерилась страница с «проэкспорченными» «пропертисами» и повесилась в main menu... да, это можно сделать (и не сложно) на пресловутом с++ (используя, к примеру, qt), но, блин, получится всё равно в 10 раз сложнее чем на том же c#

shty ★★★★★
()
Ответ на: комментарий от shty

>> прибавьте сюда более долгое тестирование системы, которая валится в рантайме, а не в статике

ололо, мусью не знает разницы между временем исполнения (пресловутый run-time) и компиляции? идём и учим термины

Не понял тебя. Я приводил пример ещё в начале треда, каким образом пейтон может валиться в рантайме, когда нормальные языки в таких же случаях валятся ещё в компайлтайме. Т.е. при тестировании поделий на статически-компилируемых языках многие ошибки можно словить ещё на этапе компиляции (т.е. быстро), а у пейтона и ему подобных можно долго ждать (например длительное подключение к удалённому узлу), чтобы система наконец-то упала из-за какого-нибудь NameError'а (т.к. связывание позднее) чтобы мы наконец-то смогли узнеать, в чём трабл (т.е. тестирование идёт дольше).

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

теоретик :)

называй хоть канделябром, твоё мнение неинтересно

ubuntulover
()
Ответ на: комментарий от shty

> пример (не самый умный, но навскидку): подключается dll/so, априори тебе неизвестная (разработал её Петров из соседней лавочки), надо что бы при загрузке модуля к нему сгенерилась страница с «проэкспорченными» «пропертисами» и повесилась в main menu... да, это можно сделать (и не сложно) на пресловутом с++ (используя, к примеру, qt), но, блин, получится всё равно в 10 раз сложнее чем на том же c#

пример высосан из пальца

ubuntulover
()
Ответ на: комментарий от Vudod

> [(x, y) for x in xrange(0, 100) for y in xrange(0, x) if (x + y)%2]

Такие случаи нужны один раз на пару сотен, а то тысяч строк кода (если, конечно, мы пишем не math-related мусор), подобные примеры, оторванные от практики, как вещь в себе, ничего не показывают абсолютно. Общим количеством абсолютно одинакового по семантике кода мы выравняем эту примочку до малопригодной.

Это как примеры на Хаскеле, где приводится сортировка хаскелем и сяхой. Искусственные примеры всё. На практике, чтобы написать что-то более стоящее на Хаскеле, чем сложение двух нечётных чисел, нужно прорываться через монадные костыли и воротить то, что мало походит на читаемость и понятность и компактность. Для математической байды не спорю, кавай. Но не всё в ней заключается, зачастую это всё-таки старый-добрый быдляцкий перебор кирпичиков, как выражался vsl.

ubuntulover
()
Ответ на: комментарий от Siado

А как на питоне замутить такое:

void foo (int & x , int & y){ 
    *x += 6; 
    *y += 15; 
} 

// Результат как бэ: 
 
int x = 10, y = 10 ; 
 
foo (x, y); 
 
//итого: 
 
x = 16; 
y = 25; 

Вроде никак.

это грязный хак С++, связанный с тем что функция не умеет возвращать более 1-го значения, в питоне делается так

def foo(x, y):
    return x+6, y+15

#юзаем

x = 10
y = 10
x, y = foo(x, y)

print x, y #вывод: 16 25
shty ★★★★★
()
Ответ на: комментарий от shty

> а ведь там смайлик есть, для одарённых :)

некоторые одарённые используют смайл вместо точки, кто вас там разберёт

ubuntulover
()
Ответ на: комментарий от ubuntulover

> это сродни «все му#@ки, один я - д'Артаньян».

Всё прекрасно расписано в гуглах. Мне неинтересно разжёвывать каждому

точняк расписано, д'Артаньян детектед :)

по теме: ты сам сначала пойми, а потом уже в позу вставай

shty ★★★★★
()
Ответ на: комментарий от shty

> это грязный хак С++, связанный с тем что функция не умеет возвращать более 1-го значения, в питоне делается так

это тоже грязный хак :) И питон здесь-таки возвращает одно значение: туплю. Если посмотреть с точки зрения ООП: невнятный полуобъект-полупримитив с неименноваными свойствами (это я про тупле) с зависимостью от порядка следования неименованных свойств — тот ещё хак, чреватый ошибками. Я с таким же успехом могу в С++ возвратить массив. С твоей позиции возвратить массив, получается, возвратить одно, а не несколько значений?

А что если мы возвратим объект, который имеет в своих полях ссылкы на другие объекты? Это будет возвращён один объект или несколько? Та же самая хрень, только понтов поменьше.

ubuntulover
()
Ответ на: комментарий от ubuntulover

Я приводил пример ещё в начале треда, каким образом пейтон может валиться в рантайме, когда нормальные языки в таких же случаях валятся ещё в компайлтайме.

omg!!! ой-вей, так вот Вы про что! а шо c++ в runtime уже разучился падать и тупить?

Т.е. при тестировании поделий на статически-компилируемых языках многие ошибки можно словить ещё на этапе компиляции (т.е. быстро), а у пейтона и ему подобных можно долго ждать (например длительное подключение к удалённому узлу), чтобы система наконец-то упала из-за какого-нибудь NameError'а (т.к. связывание позднее) чтобы мы наконец-то смогли узнеать, в чём трабл (т.е. тестирование идёт дольше).

вот и правильно настоящим д'Артаньянам ни к чему знать о том что есть модульное тестирование, зачем оно нужно, чем плох дебаг в лоб и, до кучи, как не схватить эпик фейл

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

а на стенку пИсать умеешь? :)

shty ★★★★★
()
Ответ на: комментарий от shty

> omg!!! ой-вей, так вот Вы про что! а шо c++ в runtime уже разучился падать и тупить?

1. Я имел в виду, что advantages динамики съедаются disadvantages в плане reliability. Конечно с++ валится в рантайме, но реже. 2. с++ — не единственный статически компилируемый язык, да. я говорил _вообще какбэ_ (есть жаба нопремер (немного немало))

вот и правильно настоящим д'Артаньянам ни к чему знать о том что есть модульное тестирование, зачем оно нужно, чем плох дебаг в лоб и, до кучи, как не схватить эпик фейл

я про то и говорю — про более трудоёмкое «модульное тестирование» и «дебаг в лоб». много «умных» слов назвал — всё можно терь? :\

а на стенку пИсать умеешь? :)

да, сертификат от Майкрософт есть

ubuntulover
()
Ответ на: комментарий от ubuntulover

> это грязный хак С++, связанный с тем что функция не умеет возвращать более 1-го значения, в питоне делается так

это тоже грязный хак :)

ну не такой уж :)

И питон здесь-таки возвращает одно значение: туплю. Если посмотреть с точки зрения ООП: невнятный полуобъект-полупримитив

ну если строго говорить, то всё таки несколько значений, но таки да, завёрнутые в туплю... однако тупля ничего не косой, обычный объект, от него можно унаследоваться, поменять чего хочется... для меня гораздо более странно то что функция foo - это тоже объект :)

с неименноваными свойствами (это я про тупле) с зависимостью от порядка следования неименованных свойств — тот ещё хак, чреватый ошибками.

эмм... вот массив это не то же самое

def foo(x, y): 
	return x+6, y+' ololo' 


if __name__ == '__main__':
	
	x = 10 
	y = 'ded moroz'
	
	x, y = foo(x, y)
	
	print x, y #output: 16 ded moroz ololo

с массивом так не получится :)

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

главное не надо думать что система за тебя сама всё напишет

shty ★★★★★
()
Ответ на: комментарий от ubuntulover

Я имел в виду, что advantages динамики съедаются disadvantages в плане reliability.

сказка про белого бычка, Вы некоторые особенности языка называете недостатками, а таких особенностей в любом (!) языке можно много найти, просто Вы к ним привыкли

я про то и говорю — про более трудоёмкое «модульное тестирование»

в данном случае удалённая часть, которая реально с сетью работает, должна закрываться mock-объектом и нет никаких «стотыщ» секунд ожиданий...

> а на стенку пИсать умеешь? :)

да, сертификат от Майкрософт есть

класс! :)

shty ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.