MPogoda 12.06.2011 19:20 dood64

таки \1 — какое-то неочевидное говно:
join is a string method called on the separator, not the list. т.е. ''.join(strings)
что з хуйня? не очевиднее-ли сделать так: strings.join ?

Recommended by:

@ulidtko: str.join(" — ", ["оп", "хуй"])

and @asukafag
1. asukafag 12.06.2011 19:24

Зойчем? Чего неясного-то? Действие(объект)

2. MPogodaasukafag /1 12.06.2011 19:24 dood64

обычно делают так: объект.метод(параметры)

3. asukafagMPogoda /2 12.06.2011 19:25 NERV

Неочевидно же. К тому же, применимо на кастомный объект.

4. asukafagMPogoda /2 12.06.2011 19:26

Кстати, это вроде бы цпп-стайл, творить такую хуйню. Посылай лучик поноса.

5. MPogodaasukafag /3 12.06.2011 19:26 dood64

ещё как очевидно. и то, что ты написал — это с-стайл

6. asukafagMPogoda /5 12.06.2011 19:30

Ну сам посуди, в объекте string нахуй никому не нужен метод join. Кому он там сдался, а? Гораздно понятней написать что с объектами типа string следует сделать join — и все.

7. 238328asukafag /6 12.06.2011 19:31 >>>

лол

8. MPogodaasukafag /6 12.06.2011 19:32 dood64

ты меня не понял.
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>

9. MPogodaMPogoda /8 12.06.2011 19:32 dood64

разве так не логичней?

10. asukafagMPogoda /8 12.06.2011 19:34 NERV

Чего тут логичней-то? Это как прийти в магазин за бутылкой водки и сказать "ВОДКА ДАЙТЕ", когда правильней "ДАЙТЕ ВОДКИ"

11. MPogodaasukafag /10 12.06.2011 19:35 dood64

действие над чем выполняется? над массивом. значит в _ООП_ метод должен принадлежать массиву. так?

12. 238328MPogoda /11 12.06.2011 19:36 >>>

любая строка — та же последовательность

13. asukafagMPogoda /11 12.06.2011 19:36 NERV

Омич, где ты в питоне нашел ООП? Совсем другие методы. Там процедуры.

14. MPogoda238328 /12 12.06.2011 19:37 dood64

не понял?

15. MPogodaasukafag /13 12.06.2011 19:37 dood64

>join is a string method called
>method
>не ООП

/0

16. asukafagMPogoda /15 12.06.2011 19:39 NERV

//_. Методы != ООП, ну что же ты так. Метод — просто способ реализации какого-либо действия. Могли бы просто написать "the way for join strings is"

17. 238328 12.06.2011 19:40 >>>

join(...)
S.join(iterable) → string

Return a string which is the concatenation of the strings in the
iterable. The separator between elements is S.

18. 238328238328 /17 12.06.2011 19:40 >>>

тчк

19. MPogodaasukafag /16 12.06.2011 19:40 dood64

а зачем там классы? или классы != ООП?

20. MPogoda238328 /17 12.06.2011 19:41 dood64

и? я и спрашиваю, схуяли там всё не как у людей^W рубибогов

21. 238328 12.06.2011 19:41 >>>

такой же вопрос на stackoverflow http://stackoverflow.com/questions/49381...

22. 238328MPogoda /20 12.06.2011 19:41 >>>

ITERABLE

23. MPogoda238328 /22 12.06.2011 19:41 dood64

чё?

24. 238328MPogoda /23 12.06.2011 19:42 >>>

ты знаешь, что такое последовательности в питоне?

25. asukafagMPogoda /23 12.06.2011 19:42 NERV

ПИСЯ

26. 238328238328 /24 12.06.2011 19:44 >>>

к ним относятся, например, строки, кортежи, списки. Так вот, когда ты используешь джоин, ты к одному только классу (СТРОКА) применяешь метод соединения элементов некой последовательности при помощи разделительной строки. И вот поэтому, чтобы не городить join для всех классов последовательностей, а только для строки, оно так и используется

27. MPogoda238328 /24 12.06.2011 19:44 dood64

нет. Насколько я понял, они аргументируют это тем, что можно не только массивы так, но строки также? дык всё можно сделать и как sequence.join(string), так?

28. 238328MPogoda /27 12.06.2011 19:45 >>>

нет, это будет неверно же

29. MPogoda238328 /26 12.06.2011 19:46 dood64

о, спасибо. я понял. Это сделано для того, чтобы разрабам питона меньше методов реализовывать было?

30. 238328MPogoda /29 12.06.2011 19:47 >>>

почитай по ссылке аргументацию людей, работающих на рутнопе, ок

31. MPogoda238328 /30 12.06.2011 19:50 dood64

по ссылке ничего, кроме того, что метод можно использовать с разными последовательностями нет же

32. MPogodaMPogoda /31 12.06.2011 19:50 dood64

зпт перед "нет же" :3

33. ulidtko 12.06.2011 19:52 lunatic asylum

во-первых, проблемность этого момента прямо оговорена в документации. Во-вторых,
>>> str.join(" — ", ["оп", "хуй"])
'оп — хуй'

34. MPogodaulidtko /33 12.06.2011 19:54 dood64

документацию не читал, пильком мельком когда-то смотрел

35. MPogodaulidtko /33 12.06.2011 19:58 dood64

кстати, это вообще какой-то паскаль получается

36. ulidtkoMPogoda /35 12.06.2011 20:01 lunatic asylum

В паскале не было unbound methods и синтаксиса для их вызова.^U
Не нравится — не пользуйся.

37. MPogodaulidtko /36 12.06.2011 20:02 dood64

не пользуюсь :3 я просто спросил, почему нельзя было сделать это как элемент модуля коллекции (ни или как оно там называется)?

38. MPogodaulidtko /33 12.06.2011 20:03 dood64

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.

39. ulidtkoMPogoda /37 12.06.2011 20:05 lunatic asylum

потому что это метод класса str?..

Вангую твой следующий вопрос: почему это метод класса str, а не метод коллекций (??) — потому что он применим только к спискам строк, а не к произвольным объектам.

40. ulidtkoMPogoda /38 12.06.2011 20:05 lunatic asylum

> string module
> str class
не делай меня грустить позязя.

41. MPogodaulidtko /39 12.06.2011 20:07 dood64

ойлоло, питон кэннот инто приведение типов?
>>> 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
>>>

42. ulidtkoMPogoda /41 12.06.2011 20:09 lunatic asylum

> приведение типов
>_\\\

Иди-ка ты осиливать питоновский duck typing, потом продолжим.

43. MPogodaulidtko /42 12.06.2011 20:10 dood64

мсье не знает руби?

44. ulidtkoMPogoda /43 12.06.2011 20:10 lunatic asylum

не знаю.

45. MPogodaulidtko /44 12.06.2011 20:11 dood64

в руби duck typing раобтает как надо, внезапно:
irb(main):001:0> a=[1,2,3]
=> [1, 2, 3]
irb(main):002:0> a.join '-'
=> "1-2-3"

46. ulidtkoMPogoda /45 12.06.2011 20:18 lunatic asylum

это не duck typing, это weak typing. Инты не «выглядят как строки», хотя бы потому что не имеют длины и индексации. В питоне же типизация строгая (strong), что не позволяет implicitly преобразовывать объекты одних типов в объекты других типов. Это не делает невозможным принудительное (explicit) преобразование их в строку:
>>> str.join('-', map(str, [1,2,3]))
'1-2-3'

47. MPogodaulidtko /46 12.06.2011 20:23 dood64

да, согласен, это не дак тайпинг :)
но мы вроде бы обсуждали почему делать join методом класса стр а не методом модуля коллекций?

48. ulidtkoMPogoda /47 12.06.2011 20:24 lunatic asylum

имхо, дальше здесь обсуждать нечего. Все примеры и объяснения я привёл.

49. MPogodaulidtko /48 12.06.2011 20:25 dood64

окей, просто по-моему так нелогичнее

Do you really want to delete ?