ФорумПрограммированиеPython → Python vs Ruby

Python vs Ruby

  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 30 марта 2012 г. 11:08

    Python vs Ruby
    Ответ на Python vs Ruby
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 30 марта 2012 г. 11:16, спустя 8 минут 14 секунд

    Сапожник без сапог
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 30 марта 2012 г. 11:52, спустя 36 минут 17 секунд

    К слову о:

    Начиная с версии 1.9 named capture groups в регулярных выражениях можно автоматически превращать в переменные.


    http://habrahabr.ru/company/radmin/blog/137497/


    Во-первых пример на python сразу видно искуственно излишен.
    Во-вторых, вот вам укороченная версия, только что написал:

    import re

    class regexp(object):
       def __init__(self, pattern):
           self.pattern = pattern

       def __xor__(self, string):
           groups = re.search(self.pattern, string).groupdict()
           globals().update(groups)
           return None


    Вызывается так

    regexp('(?P<x>\d+)x(?P<y>\d+)') ^ "25x30"
    print x, y


    Почитав это: http://www.rafekettler.com/magicmethods.html, можете сами найти нужный вам синтаксис
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 30 марта 2012 г. 11:40, спустя 23 часа 48 минут 19 секунд

    Интерполяция строк позволяет включать в строки код на Ruby, автоматически подставляя в строку результат его выполнения.

    Опять таки, можно тоже сделать, но этом будет eval, мне больше нравится format

    И кстати format очень мощный:
    http://docs.python.org/library/string.html#formatstrings
    http://asvetlov.blogspot.com/2011/02/formatting.html
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 30 марта 2012 г. 11:48, спустя 7 минут 53 секунды

    globals().update(groups)

    а если мне нужно заимпортить не в глобальную область видимости а в текущую?
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 30 марта 2012 г. 11:51, спустя 2 минуты 20 секунд


    Индексирование за пределами коллекции возвращает nil, что позволяет в ряде случаев писать очень лаконичный код.


    nil в Ruby это всё тотже None/null?
    Тогда плохо что он так делает, как можно будет отличить IndexError/StopIteration от значения в коллекции?

    >>> l = [1, 2, None]
    >>> print l[2]
    None
    >>> print l[5]
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    IndexError: list index out of range



    >>> l = iter([1, 2, None])
    >>> print l.next()
    1
    >>> print l.next()
    2
    >>> print l.next()
    None
    >>> print l.next()
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    StopIteration


    Вообщем за счет чего в Ruby это всё корректно обрабатывается?
    Спустя 15 сек.

           globals().update(groups)

    а если мне нужно заимпортить не в глобальную область видимости а в текущую?
    locals()
    Спустя 91 сек.

    ps. globals() будет распостронятся только на модуль, а locals() будет доступен только в методе regexp.__xor__
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 30 марта 2012 г. 12:09, спустя 18 минут 28 секунд

    как можно будет отличить IndexError/StopIteration от значения в коллекции?

    а это вообще нужно?
    не всё полезно, что в swap полезло
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 30 марта 2012 г. 12:12, спустя 2 минуты 55 секунд

    ps. globals() будет распостронятся только на модуль, а locals() будет доступен только в методе regexp.__xor__

    мне нужно в контексте вызова этой твоей чудо-функции
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 30 марта 2012 г. 12:20, спустя 8 минут 17 секунд

    Чтобы не играться с globals, я бы использовал так:

    class regexp(object):
       def __init__(self, pattern):
    self.pattern = pattern

       def __xor__(self, string):
           import re
           groups = re.search(self.pattern, string).groups()
           return groups



    x, y = regexp('(\d+)x(\d+)') ^ "25x30"


    Это более правильных подход
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 30 марта 2012 г. 12:17, спустя 23 часа 56 минут 52 секунды


    Начиная с версии 1.9 named capture groups в регулярных выражениях можно автоматически превращать в переменные.


    http://habrahabr.ru/company/radmin/blog/137497/


    хм…

    preg_match('/(?<x>\d+)x(?<y>\d+)/', '25x30', $matches); extract($matches);
    echo "magic: $x, $y";



    magic: 25, 30
    ιιlllιlllι унц-унц
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 30 марта 2012 г. 12:18, спустя 50 секунд

    adw0rd, да, вот так кулл
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 30 марта 2012 г. 12:18, спустя 9 секунд


    как можно будет отличить IndexError/StopIteration от значения в коллекции?

    а это вообще нужно?

    1. надо понимать что коллекция кончилась
    2. надо понимать что nil это кончилась коллекция или это значение коллекции

    Что не понятно?
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Sinkler

    Сообщения: 7958 Репутация: N Группа: в ухо

    Spritz 30 марта 2012 г. 12:26, спустя 7 минут 20 секунд



    как можно будет отличить IndexError/StopIteration от значения в коллекции?

    а это вообще нужно?

    1. надо понимать что коллекция кончилась
    2. надо понимать что nil это кончилась коллекция или это значение коллекции
    это да, хороший аргумент
  • master

    Сообщения: 3244 Репутация: N Группа: Джедаи

    Spritz 30 марта 2012 г. 12:26, спустя 26 секунд

    adw0rd, непонятно, почему программист должен решать задачу интерпретатора. в пхп например я использую foreach и не задумываюсь, последний ли индекс в массиве. в руби (и питоне наверное) есть итераторы, которые решают аналогичную задачу. когда и зачем требуется обратиться к элементу массива/коллекции по индексу?
    не всё полезно, что в swap полезло
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 30 марта 2012 г. 12:52, спустя 25 минут 55 секунд

    Во-вторых, вот вам укороченная версия, только что написал:


    Перестаньте писать классы

Пожалуйста, авторизуйтесь, чтобы написать комментарий!