MPogoda
12.06.2011 19:20 dood64
таки \1 — какое-то неочевидное говно:
join is a string method called on the separator, not the list. т.е. ''.join(strings)
что з хуйня? не очевиднее-ли сделать так: strings.join ?
Зойчем? Чего неясного-то? Действие(объект)
обычно делают так: объект.метод(параметры)
Неочевидно же. К тому же, применимо на кастомный объект.
Кстати, это вроде бы цпп-стайл, творить такую хуйню. Посылай лучик поноса.
ещё как очевидно. и то, что ты написал — это с-стайл
Ну сам посуди, в объекте string нахуй никому не нужен метод join. Кому он там сдался, а? Гораздно понятней написать что с объектами типа string следует сделать join — и все.
лол
ты меня не понял.
irb(main):001:0> strings=['ugnich', '-','khooy']
=> ["ugnich", "-", "khooy"]
irb(main):002:0> strings.join
=> "ugnich-khooy"
irb(main):003:0> strings.join ' '
=> "ugnich — khooy"
irb(main):004:0>
разве так не логичней?
Чего тут логичней-то? Это как прийти в магазин за бутылкой водки и сказать "ВОДКА ДАЙТЕ", когда правильней "ДАЙТЕ ВОДКИ"
действие над чем выполняется? над массивом. значит в _ООП_ метод должен принадлежать массиву. так?
любая строка — та же последовательность
Омич, где ты в питоне нашел ООП? Совсем другие методы. Там процедуры.
не понял?
>join is a string method called
>method
>не ООП
/0
//_. Методы != ООП, ну что же ты так. Метод — просто способ реализации какого-либо действия. Могли бы просто написать "the way for join strings is"
join(...)
S.join(iterable) → string
Return a string which is the concatenation of the strings in the
iterable. The separator between elements is S.
тчк
а зачем там классы? или классы != ООП?
и? я и спрашиваю, схуяли там всё не как у людей^W рубибогов
такой же вопрос на stackoverflow http://stackoverflow.com/questions/49381...
ITERABLE
чё?
ты знаешь, что такое последовательности в питоне?
ПИСЯ
к ним относятся, например, строки, кортежи, списки. Так вот, когда ты используешь джоин, ты к одному только классу (СТРОКА) применяешь метод соединения элементов некой последовательности при помощи разделительной строки. И вот поэтому, чтобы не городить join для всех классов последовательностей, а только для строки, оно так и используется
нет. Насколько я понял, они аргументируют это тем, что можно не только массивы так, но строки также? дык всё можно сделать и как sequence.join(string), так?
нет, это будет неверно же
о, спасибо. я понял. Это сделано для того, чтобы разрабам питона меньше методов реализовывать было?
почитай по ссылке аргументацию людей, работающих на рутнопе, ок
по ссылке ничего, кроме того, что метод можно использовать с разными последовательностями нет же
зпт перед "нет же" :3
во-первых, проблемность этого момента прямо оговорена в документации. Во-вторых,
>>> str.join(" — ", ["оп", "хуй"])
'оп — хуй'
документацию не читал, пильком мельком когда-то смотрел
кстати, это вообще какой-то паскаль получается
В паскале не было unbound methods и синтаксиса для их вызова.^U
Не нравится — не пользуйся.
не пользуюсь :3 я просто спросил, почему нельзя было сделать это как элемент модуля коллекции (ни или как оно там называется)?
Use string methods rather than the string module. For example, use s.startswith('abc') rather than startswith(s, 'abc'). This lets you use other objects that just support a small part of the string interface (e.g. ones you write yourself): the string module functions generally expect real strings. There are a few cases where you need to import string: for example, maketrans is still only available through the string module. However, in general, seeing that import statement is a warning sign.
потому что это метод класса str?..
Вангую твой следующий вопрос: почему это метод класса str, а не метод коллекций (??) — потому что он применим только к спискам строк, а не к произвольным объектам.
> string module
> str class
не делай меня грустить позязя.
ойлоло, питон кэннот инто приведение типов?
>>> a
[1, 2, 3]
>>> 'a'.join(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected str instance, int found
>>>
> приведение типов
>_\\\
Иди-ка ты осиливать питоновский duck typing, потом продолжим.
мсье не знает руби?
не знаю.
в руби duck typing раобтает как надо, внезапно:
irb(main):001:0> a=[1,2,3]
=> [1, 2, 3]
irb(main):002:0> a.join '-'
=> "1-2-3"
это не duck typing, это weak typing. Инты не «выглядят как строки», хотя бы потому что не имеют длины и индексации. В питоне же типизация строгая (strong), что не позволяет implicitly преобразовывать объекты одних типов в объекты других типов. Это не делает невозможным принудительное (explicit) преобразование их в строку:
>>> str.join('-', map(str, [1,2,3]))
'1-2-3'
да, согласен, это не дак тайпинг :)
но мы вроде бы обсуждали почему делать join методом класса стр а не методом модуля коллекций?
имхо, дальше здесь обсуждать нечего. Все примеры и объяснения я привёл.
окей, просто по-моему так нелогичнее