Форум → Программирование → Python → Python vs Ruby
Python vs Ruby
Страницы: ← Следующая страница →
-
-
-
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 на все случаи жизни -
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.htmlhttps://smappi.org/ - платформа по созданию API на все случаи жизни -
30 марта 2012 г. 11:48, спустя 7 минут 53 секунды
globals().update(groups)
а если мне нужно заимпортить не в глобальную область видимости а в текущую? -
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 сек.
locals()globals().update(groups)
а если мне нужно заимпортить не в глобальную область видимости а в текущую?Спустя 91 сек.
ps. globals() будет распостронятся только на модуль, а locals() будет доступен только в методе regexp.__xor__https://smappi.org/ - платформа по созданию API на все случаи жизни -
30 марта 2012 г. 12:09, спустя 18 минут 28 секунд
как можно будет отличить IndexError/StopIteration от значения в коллекции?
а это вообще нужно?не всё полезно, что в swap полезло -
30 марта 2012 г. 12:12, спустя 2 минуты 55 секунд
ps. globals() будет распостронятся только на модуль, а locals() будет доступен только в методе regexp.__xor__
мне нужно в контексте вызова этой твоей чудо-функции -
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 на все случаи жизни -
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ι унц-унц -
-
30 марта 2012 г. 12:18, спустя 9 секунд
как можно будет отличить IndexError/StopIteration от значения в коллекции?
а это вообще нужно?
1. надо понимать что коллекция кончилась
2. надо понимать что nil это кончилась коллекция или это значение коллекции
Что не понятно?https://smappi.org/ - платформа по созданию API на все случаи жизни -
30 марта 2012 г. 12:26, спустя 7 минут 20 секунд
это да, хороший аргументкак можно будет отличить IndexError/StopIteration от значения в коллекции?
а это вообще нужно?
1. надо понимать что коллекция кончилась
2. надо понимать что nil это кончилась коллекция или это значение коллекции -
30 марта 2012 г. 12:26, спустя 26 секунд
adw0rd, непонятно, почему программист должен решать задачу интерпретатора. в пхп например я использую foreach и не задумываюсь, последний ли индекс в массиве. в руби (и питоне наверное) есть итераторы, которые решают аналогичную задачу. когда и зачем требуется обратиться к элементу массива/коллекции по индексу?не всё полезно, что в swap полезло -
Страницы: ← Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!