Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что лучше осваивать. (Python or Ruby) 
:(
    Опции темы
kemiisto
Дата 26.12.2008, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



Lazin, так ну с генераторами разобрался - есть!
Код

require 'generator'

g = Generator.new do |g|
  x = 0
  while true
    g.yield x
    x += 2
  end
end

s = 0

for x in g
  break if x > 100 
  s += x
end        

puts s

Сейчпс посмотрим, что там за генераторные выражения...


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Lazin
Дата 26.12.2008, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



декораторы:

Код

def logger(fn):
    def impl(*argc, **argv):
        print fn.__name__, 'called'
        print 'positional args:', list(arg for arg in argc)
        print 'keyword args:', list((key, value) for (key, value) in argv.iteritems())
        retval = fn(argc, argv)
        print 'return value is', retval
        return retval
    return impl

@logger
def some_func(p, *argc, **argv):
    print 'function called'
    return "i'am return value"

some_func(
    'first param',
    'positional param',
    keyword_param='keyword param value'
    )

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

Добавлено через 1 минуту и 29 секунд
зы
сдесь logger это декоратор, some_func - декорируемая ф-я
PM MAIL Skype GTalk   Вверх
Lazin
Дата 26.12.2008, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



сопрограммы:
Код

def print_value():
    while True:
        x = (yield)
        print x

def even_numbers():
    x = 0
    while True:
        yield x
        x += 2

s = 0
gen = print_value()
gen.next()
for x in even_numbers():
    if x > 100:
        break
    s += x
    gen.send(x)

в общем это генератор наоборот, ф-я print_value на самом деле не ф-я а сопрограмма, единственно но, нужно сначала вызвать ф-ю next генератора, а потом уже туда что-то отправлять, но это можно обойти использовав декоратор smile 
PM MAIL Skype GTalk   Вверх
kemiisto
Дата 26.12.2008, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



Декораторы - так я и не понял, что это, но в Ruby это тоже можно. smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Lazin
Дата 26.12.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



ага, с помощью патча для интерпретатора  smile 
PM MAIL Skype GTalk   Вверх
kemiisto
Дата 26.12.2008, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



Цитата(Lazin @  26.12.2008,  15:47 Найти цитируемый пост)
ага, с помощью патча для интерпретатора

Цитата
Instead of:

def f(...)
  ...
f = synchronize(f)

you can now write:

@synchronize
def f(...)
  ...

Синтаксический сахар рулит? Давно ли?

Добавлено через 6 минут и 2 секунды
Цитата(Lazin @  26.12.2008,  15:34 Найти цитируемый пост)
сопрограммы

И это тоже есть. Признаться мне очень трудно оценить практическую полезность всех этих "фич". В конечном счёте - всё это синтаксический сахар. Да, Python, наверное, будет послаще... Но, разве в этом суть?

В общем, вот правильная статья! smile

Добавлено через 8 минут и 28 секунд
И коменты там тоже ничего. smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Daevaorn
Дата 26.12.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 5
Всего: 70



Эх народ, как же меня умиляют подобные "беседы". Супер.

Кстати, как опытный холиварщик, могу сказать, что слив типа "а это синтаксичесий сахар" на самом деле означает "блин, а реально нет:(". Тем более из уст приверженца Рубиsmile
PM MAIL WWW   Вверх
kemiisto
  Дата 26.12.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



Цитата(Daevaorn @  26.12.2008,  20:04 Найти цитируемый пост)
Кстати, как опытный холиварщик, могу сказать, что слив типа "а это синтаксичесий сахар" на самом деле означает "блин, а реально нет:(".

Daevaorn, ага, сразу видно, что ты "опытный" холиваршик. Не читая, сразу всё "разрулил". Извиняюсь за грубость, но речь шла о том, что декораторы в Python появились вот так:
Цитата

Motivation
The current method of applying a transformation to a function or method places the actual transformation after the function body. For large functions this separates a key component of the function's behavior from the definition of the rest of the function's external interface. For example:
Код

def foo(self):
    perform method operation
foo = classmethod(foo)

This becomes less readable with longer methods. It also seems less than pythonic to name the function three times for what is conceptually a single declaration. A solution to this problem is to move the transformation of the method closer to the method's own declaration. The intent of the new syntax is to replace
Код

def foo(cls):
    pass
foo = synchronized(lock)(foo)
foo = classmethod(foo)

with an alternative that places the decoration in the function's declaration:
Код

@classmethod
@synchronized(lock)
def foo(cls):
    pass


Тут как раз и говорится, что это синтаксический сахар. И неоднакротно обсуждалось в списке рассылки: 1, 2, ...

Для первого варианта в Ruby есть аналог, чтоб была поддержка Python-like декораторов - нужно патчить интерпретатор. 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Daevaorn
Дата 26.12.2008, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 5
Всего: 70



Цитата(kemiisto @  26.12.2008,  23:20 Найти цитируемый пост)
Daevaorn, ага, сразу видно, что ты "опытный" холиваршик. Не читая, сразу всё "разрулил". Извиняюсь за грубость, но речь шла о том, что декораторы в Python появились вот так:

Ровным счетом не важно как они появились. При сопоставлении фич языка, ответ вида "синтаксический сахар" не зачетный. Т.к. сахар не сахар, это не важно - важно что эта фича есть.

Кстати, сливы типа "а полезно/нужно ли" тоже в зачет не идут. У всех своя область применения.
PM MAIL WWW   Вверх
Lazin
Дата 26.12.2008, 22:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



Цитата(kemiisto @  26.12.2008,  22:20 Найти цитируемый пост)
Тут как раз и говорится, что это синтаксический сахар.

если-бы не синтаксический сахар, писать нам всем на асме smile 
PM MAIL Skype GTalk   Вверх
kemiisto
  Дата 26.12.2008, 22:54 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



Цитата(Daevaorn @  26.12.2008,  20:35 Найти цитируемый пост)
Кстати, сливы типа "а полезно/нужно ли" тоже в зачет не идут. У всех своя область применения. 

Дык и не было такого "слива". А про синтаксический сахар. Ещё раз: то, что в Python делают декораторы, доступно и без них. Причину введения в язык декораторов я уже приводил:
Цитата
This becomes less readable with longer methods. It also seems less than pythonic to name the function three times for what is conceptually a single declaration.

Ну, коли уж это не по-питоновски, так уберите первую возможность! А то:
Цитата(Python Zen)
There should be one-- and preferably only one --obvious way to do it.

Shoul be, should be, а как на деле, так 
Цитата("Ruby Zen")
There is more than one way to do it!

 smile

Добавлено через 1 минуту и 42 секунды
Цитата(Lazin @  26.12.2008,  20:36 Найти цитируемый пост)
если-бы не синтаксический сахар, писать нам всем на асме smile 

Как любит говорить Akella, Troll Detected! smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Daevaorn
Дата 27.12.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 5
Всего: 70



Опять повторяю, что это не аргумент. Так можно дойти и до того, что операция умножения тоже синтаксический сахар...Нет, есть фича и её не отнять.

Да ладно там декораторы, в питоне ещё куча вкусностей и дескрипторы, и метаклассы и даже list comprehensions. Так что список набирается хороший.
PM MAIL WWW   Вверх
kemiisto
Дата 27.12.2008, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



Цитата(Daevaorn @  27.12.2008,  16:08 Найти цитируемый пост)
Так можно дойти и до того, что операция умножения тоже синтаксический сахар.

Вы утрируете. Операция умножения - одна из 4-х простоейших арифметических операций. Никак она не может быть синтаксическим сахаром.

Цитата(Daevaorn @  27.12.2008,  16:08 Найти цитируемый пост)
Нет, есть фича и её не отнять.

Я и не отнимаю, просто говорю, что такая же или аналогичная по функциональности "фича" найдётся и в Ruby. А если не найдётся, видимо, не нужна. В свете наличия других "фич".

Цитата(Daevaorn @  27.12.2008,  16:08 Найти цитируемый пост)
Да ладно там декораторы, в питоне ещё куча вкусностей и дескрипторы, и метаклассы и даже list comprehensions.

Я не знаю, что это такое. Но либо это есть и в Ruby, либо в нём есть иные "фичи" для достижения аналогичных целей. 

Цитата(Daevaorn @  27.12.2008,  16:08 Найти цитируемый пост)
Так что список набирается хороший. 

А вот это как раз не аргумент, т.к. если "покопать" Ruby можно набрать аналогичный список.

Просто сначала говорили скорость - оказалось, что уже не аргумент. Python 3 существенно медленнее предшественика, а вот Ruby 1.9 (2.0), напротив, должен существенно прибавить в скорости. Потом был аргумент:
Цитата(Lazin @  26.12.2008,  11:24 Найти цитируемый пост)
ну как скажешь... вот то чего точно нет в руби
    * - генераторы
    * - генераторные выражения
    * - сопрограммы
    * - декораторы

Как оказалось всё это (или как минимум аналоги) в Ruby есть. 

А теперь, посмотрим с чего всё начиналось:
Цитата(GrayCardinal @  21.12.2008,  14:10 Найти цитируемый пост)
Я утверждаю, что зная основы Ruby, не стоит отвлекаться на такой мусор, как Python

Так вот, если убрать слово мусор, то я, как говорится, ППКС. Т.е. я хочу сказать, что зная Ruby, знать Python не за чем. Обратное то же верно! Языки во многом схожи (перечислять не буду, лень, но думаю понятно). Нет смысла изучать 2 таких похожих языка. Одни и теже задачи на этих языках решаются примерно одинаково (с использованием аналогичных синтаксических конструкций). Если знаешь основы Ruby, значит ты не разочаровался в этом языке по мере его изучения, тебе он по душе, его и надо продолжать изучать. 

Это сообщение отредактировал(а) kemiisto - 27.12.2008, 18:54


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Daevaorn
Дата 28.12.2008, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 5
Всего: 70



Цитата(kemiisto @  27.12.2008,  19:54 Найти цитируемый пост)
А если не найдётся, видимо, не нужна.

Вам? А нам нужна. Странная позиция.
Цитата(kemiisto @  27.12.2008,  19:54 Найти цитируемый пост)
Я не знаю, что это такое. Но либо это есть и в Ruby, либо в нём есть иные "фичи" для достижения аналогичных целей. 

Так узнайте. И потом, что значит "либо в нём есть иные "фичи" для достижения аналогичных целей." - это же ведь все можно до такого абсурда свести. Поизучайте лучше питон - он явно у вас страдает.
Цитата(kemiisto @  27.12.2008,  19:54 Найти цитируемый пост)
А вот это как раз не аргумент, т.к. если "покопать" Ruby можно набрать аналогичный список.

Да еще какой! Только вы нам его еще не показали;-)
Цитата(kemiisto @  27.12.2008,  19:54 Найти цитируемый пост)
Как оказалось всё это (или как минимум аналоги) в Ruby есть. 

Не все.
Цитата(kemiisto @  27.12.2008,  19:54 Найти цитируемый пост)
Если знаешь основы Ruby, значит ты не разочаровался в этом языке по мере его изучения, тебе он по душе, его и надо продолжать изучать. 

Так основы знают многие и те кто все-таки разочаровался и выбрал питон. Так что каждому свое. Не надо крайностей.
PM MAIL WWW   Вверх
nerezus
Дата 28.12.2008, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



Цитата

nerezus, а что мне до твоего Psyco, ты вот сюда посмотри:
 Т.е. ты сравниваешь нормальную версию руби и новый питон, под которые еще модулей нет, не говоря уже о фреймворках?)
Жжош.

Сравнивай одинаковые версии(в данном случае - продакшн).
А это python 2.5 + psyco и ruby(не 1.9 unstable которая).


Цитата

все равно быстрее, да и производительность здесь не самое главное  
 А если сайт не хомпага, а что-то серьезное? Про DDoS слышал?
Из моих сайтов, написанных для заказчиков, ддосили большую часть.

Цитата

 как только Ruby перейдёт на YARV
 Вот когда на него перейдут - тогда и поговорим. Причем когда на него и либы сделают. А пока руби - тормоз(с этим, думаю, не споришь?).

Цитата

 Ещё раз: то, что в Python делают декораторы, доступно и без них. 
 А все, что доступно в C++, можно сделать и в C.
Т.е. C++ - как бы синтаксический сахар над C.
Но заметь, как этот сахар помогает %)

Да и вообще компилятор - это синтаксический сахар над бинарным кодом (с) кто-то отсюда

Это сообщение отредактировал(а) nerezus - 28.12.2008, 12:51


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.0634 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.