пятница, 15 мая 2009 г.

Ну зачем так?

Самое загадочное в Python, на мой взгляд - ';'.join(words)
Неужто есть рациональное объяснение этому?

12 комментариев:

  1. нелогично...
    обратный порядок (как, например, в жабаскрипте) чуть лучше, но самым нормальным было бы имхо что-нибудь около words.join_with(';')

    ОтветитьУдалить
  2. Этот комментарий был удален автором.

    ОтветитьУдалить
  3. join() - строковый метод, ';' - строка. Логика есть :)

    ОтветитьУдалить
  4. Ну яж не говорю, что логика отсутствует :)
    Просто если по-нормальному читать, то берём строку и объединяем с массивом - хрень какая-то...
    Понятное дело, что человек ко всему привыкает, но вопрос зачем это делать, если можно было бы без этого обойтись?

    ОтветитьУдалить
  5. words не просто массив, а вообще iterator
    Ничего конкретно не доказываю, просто в голову пришло.

    ОтветитьУдалить
  6. Кстати да, важное замечание, об этом как-то я не подумал...

    ОтветитьУдалить
  7. Ага, а еще str.__len__() или len(str) вместо ожидаемого str.len()

    Думаю, это говорит о том, что даже у Гвидо есть кривые руки и прямые извилины...

    ОтветитьУдалить
  8. а что плохого в len(str). len - полиморфная функция, по-моему всё ок.

    ОтветитьУдалить
  9. Мне это тоже показалось сначала странным, потом начал рассуждать так: в питоне строка — не список (как в ерланге, например), поэтому join можно применить только к списку строк, а список у нас может содержать не только строки, но и всё, что угодно. Значит, делать join одним из методов списка неправильно. Но использовать ",".join(...) вообще страшно, поэтому я использую str.join(",", ["qwe", "asd"])

    Или string.join(["qwe", "xcv"], ",")

    Так-то :)

    ОтветитьУдалить
  10. А по-моему тут проблема, что ООПшный взгляд тут только мешает, выделение какого-либо аргументов в качестве this не несёт большого смысла, поэтому самым логичным для меня была бы "свободная" функция, но в рамках Питона самым внятным будут твои последние 2 варианта.

    ОтветитьУдалить
  11. Говорят, правда, что string — устаревший модуль, оставлен только для совместимости, поэтому лучше юзать str, наверное.

    ОтветитьУдалить