![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| setq |
|
||||||||
|
Unregistered |
вот первая небольшая статья о python (из неопубликованной серии «это все уже давно знали кроме setq») :
python – высокоуровневый, интерпретируемый, объектно-ориентированный и прочее. [пропустим] начав его изучать, я обратил внимание на то, что в нём нет двух очень удобных операций, которые есть в си++. это A?B:C и A,B. напомню, что операция A?B:C врозвращает B, если A истинно, и C, если A ложно, а операция A,B всегда возвращает B, но при этом предварительно вычисляется A, что позволяет удобно организовать поток исполнения внутри выражений. в python’е этих операций нет, что для языка, в котором можно прямо в строке писать функции и тут же их исполнять, как минимум странно. я так думал. пока не узнал о необычном поведении операций and и or. например, выражение 5 == 5 and 13 возвращает вовсе не True, как можно было бы ожидать, а 13. тоже самое с выражением 5 == 0 or “boo” – возвращаемым значением будет “boo”. (python вообще язык со странностями) как это нам помогает писать программы? в принципе, выражение X and Y or Z (запомнили?) будет ПОЧТИ аналогично A?B:C в языке си++. если X истина, результатом будет Y, если ложно – то Z. и так, рассмотрим пример (немного искусственный), в котором lambda-функция, принимающая 2 аргумента, делит их друг на друга:
здесь функция f, вызванная с аргументами 12 и 6, возвращает 2 (кто бы сомневался). всё замечательно. пока я не напишу что-нибудь вроде:
результат - ошибка деления на 0. чтобы её избежать, нужно проверить второй параметр и, если он равен 0, то что-то предпринять. например, наша функция могла бы возвращать пару из двух значений (bool,int), в которой первое значение было бы флагом отсутствия ошибки, а второе – уже самим результатом. «пацан сказал – пацан сделал» :))
теперь, проверим...
ура, работает. всё. на этом месте эта дурацкая статья закончилась. ВНИМАНИЕ! ВНИМАНИЕ! ВНИМАНИЕ!: всё-таки хочу ещё раз заметить, что X and Y or Z в python _не_ тоже самое, что A?B:C в си++, и с этим иногда надо быть осторожным. и уж во всяком случае всегда быть внимательным. если вы захотите на место Y поставить выражение, которое может быть истолковано «змеюкой» как ложное, то схема не сработает и вернётся всё равно Z. считайте, что я вас предупредил. :)) |
||||||||
|
|||||||||
| setq |
|
||||||
|
Unregistered |
совсем уже безобразно короткая статья о python:
если вам в интерактивном режиме необходимо выполнить несколько действий подряд, можно написать
всё :) пользуйте наздоровье |
||||||
|
|||||||
| [set q] |
|
||||
|
Unregistered |
кому-нибудь эта функция может показаться полезной, мне она в стандарте на глаза не попалась
|
||||
|
|||||
| [set q] |
|
|||
|
Unregistered |
то есть в пред. примере там получится
должно во всяком случае |
|||
|
||||
| setq |
|
|||
|
Unregistered |
немного по поводу того почему в стандартной библиотеке не обнаружилось функции unzip:
|
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 2 Всего: 317 |
Ещё бы коменты к коду, а то немного как китайская грамота...
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| setq |
|
||||||
|
Unregistered |
ты про unzip?
кажется это называется транспонированием... но я... не помню. встроенная функция zip как раз это и делает.
|
||||||
|
|||||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 2 Всего: 317 |
Ясно. Одно не понятно, почему название zip и где ты это применил? Не про математику спрашиваю и лаб. задачи, а на практике?
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| setq |
|
|||
|
Unregistered |
название пришло из Haskell (наверно. во всяком случае там есть одноимённая функция; хотя Haskell сам в своё время вобрал в себя много из других языков, так что возможно zip для сшивания последовательностей использовали ещё динозавры). в Haskell есть и функция обратная zip - unzip. но в Haskell разница между [] и () более сильная чем в Python. ну... там по-другому чуть чуть. там без unzip вообще не обойтись.
для чего использовать? м... ну не знаю. я же сам только начинающий. ну предположим у меня есть список секретных агентов [ ( имя, номерТелефона, подпольноеПрозвище ) ]. я хочу получить в программе список всех телефонов секретных агентов. для этого я мог бы написать так:
|
|||
|
||||
| bialix |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 4.7.2005 Репутация: нет Всего: нет |
у такого метода будут серьезные проблемы, если длины первоначальных последовательностей различаются
вообще-то говоря звездочка здесь выражает, что аргумент внешнего zip представляет собой кортеж неименованных аргументов |
||||||
|
|||||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Python: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |