портирование кода - PullRequest
       4

портирование кода

2 голосов
/ 31 января 2011

У меня есть следующие фрагменты кода:

code1 :

lis = ["a", "s", "d"]
string.join(lis)

code2 :

lis = ["a", "s", "d"]
' '.join(lis)

Результаты:

Для обоих случаев результат равен 'как d'

Теперь должны быть определенные случаи (если я прав), когда значение 'sep ', значение разделения по умолчанию отличается от' '.Я действительно хотел бы знать, когда происходят такие случаи?

У меня есть следующие сомнения:

  1. Есть ли разница между двумя вышеупомянутыми кодами, более конкретно в 'оператор присоединения в случае python2.x.

  2. Если «да», то как мне выполнить задачу «code1» в python3.x, потому что в строке python3.x нетиметь модуль 'join'

заранее спасибо ..

Ответы [ 4 ]

2 голосов
/ 31 января 2011

Нет существенной разницы.Во всех случаях, когда вы могли бы использовать первую форму, вторая будет работать, а вторая будет продолжать работать на Python 3.

Однако некоторые люди считают, что написание вызова метода для литеральной строки выглядит неожиданноесли вы один из них, то есть несколько других вариантов:

' '.join(iterable) # Maybe looks a bit odd or unfamiliar?

Вы можете использовать имя вместо буквенной строки:

SPACE = ' '
...
SPACE.join(iterable) # Perhaps a bit more legible?

Или вы можете написать его встиль, аналогичный string.join(), но имейте в виду, что аргументы противоположны:

str.join(' ', iterable)

Наконец, расширенный вариант - использовать несвязанный метод.например,

concatenate_lines = '\n'.join
...
print(concatenate_lines(iterable))

Любой из них будет работать, просто выберите тот, который, по вашему мнению, лучше всего читается.

2 голосов
/ 31 января 2011

Мне пришлось поискать - большие части string устарели (заменены реальными методами на реальных str объектах);из-за этого вы, вероятно, должны использовать ' '.join даже в Python 2. Но нет, нет никаких отличий - string.join по умолчанию объединяется с помощью одного пробела (то есть ' '.join эквивалентно).

1 голос
/ 31 января 2011

Два утверждения эквивалентны.

string.join(words[, sep])  

Объединить список или кортеж слов с промежуточными событиями сентября. Значением по умолчанию для sep является один пробел.

В то время как для второго случая:

str.join(iterable)    

Возвращает строку, которая является объединением строки в итерируемой итерации. Разделителем между элементами является строка, обеспечивающая этот метод.

Поскольку вторая версия все еще существует в Python 3, вы можете использовать ее без каких-либо проблем.

Источники:

0 голосов
/ 31 января 2011

string.join принимает список или кортеж в качестве параметра, тогда как "" .join принимает любые итерируемые.

если вы хотите передать список или кортеж, оба варианта равны.В python3 существует только второй вариант afaik

...