##python vs ruby
###Выборка элементов из массива
ruby
arr[n..m]
python
arr[n:m]
arr[n:] # если нужно до конца
Если граница переменная - нужно обрабатывать 2 случая отдельно
###Получение элементов из мапы
ruby
map[non_existing_key]
# => nil
python
map[non_existing_key]
# => Exception
# для None нужно использовать длинный синтаксис.
# не встречал ни одной ситуации, где выброс эксепшена нужно было бы как-то обрабатывать помимо добавления этого самого ключа
Плюс в руби можно значения по-умолчанию.
###Виртуальная среда vs bundler
Сам не работал, но видел как используют в питоне - не впечатлило
###Почему отступы в питоне - неуклюжие
Пусть нужно добавить if в существующий код:
ruby way:
- добавить if и end
- сказать редактору, чтоб отформатировал код
python way:
- добавить if
- если в редакторе есть multiedit - сдвинуть нужные строки
- если нету - страдать
###self методах
Тут просто лишние сущности в которых, к тому же, лично я часто делаю опечатки.
###Консольный питон из коробки не умеет ничего
Не может даже в автодополнение
###Ужасные внешнее функции вида len(), не соответствуют объектному подходу
К тому же это осложняет автокомплит. В руби наличие функции .size
можно проверить табом, а в питоне только ловить эксепшен из len
и других подобных внешних функций.
###Лямбда-выражения ужасны, невозможно написать многострочными
ruby
arr.filter{|x| x != nil}
ruby
arr.filter do |x|
x != nil
end
python
filter(lambda x: x != None, arr)
###Непонятно как делать многострочные комманды
Возможно, существует специальные методы, но я сколько ни пробовал, все время огребал ошибку по отступам.
ruby
foo({
bar: 1,
baz: 2,
zen: 3
})
python
foo({bar : 1, baz : 2, zen: 3})
UPD:
На самом деле возможно, но это требует соблюдения определенных правил с отступами
###2 версии питона
обратная совместимость нарушена.
###Необходимость везде скобки писать
ruby
p debug_str
vs
python
print(debug_str)
ruby
wired = 0/0 rescue "wtf"
python
try:
wired = 0/0
except Exception:
wired = "wtf"
ruby
billion = 1_000_000_000;
python
billion = 100000000 # yes, I make a mistake
###Руби медленнее
###Комьюнити больше
###многострочные комментарии в питоне лучше
ruby (обязательно в начале строки)
=begin
какой-то коммент
=end
python
'''
какой-то коммент
'''
1, 2 - я вроде так и писал. В первом - проблема именно питона в том, что для выборки до конца нужен отдельный специальный синкасис
Во втором - "Плюс в руби можно значения по-умолчанию."
3 - если честно, не вижу идеологической разницы между лямбдами и блоками в этом случае. Ведь в каноничном определении лямбда - это анонимная функция, которая в себя захватывает контекст выполнения.