2015-03-02 4 views
1

Например, я хотел бы:Можно ли вызвать несколько методов на одной строке?

texta = text.lower() 
textacopy1 = texta.replace(string.punctuation, ' ') 
textacopy2 = textacopy1.split(' ') 

Есть уборщик способ сделать это без того, чтобы присвоить несколько переменных?

Если разница между 2.7 и 3.x, я бы предпочел объяснение 3.x.

+1

Кстати, насколько я могу сказать, 'заменить (строка .punctuation, '') 'вероятно, не делает то, что вы хотите. Вы должны вызвать его для всех отдельных символов, содержащихся в 'пунктуации'. – mkrieger1

+0

@ mkrieger1 Да, это была проблема, которую я исправил с помощью цикла. – Omicron

ответ

6
result = text.lower().replace(string.punctuation, ' ').split(' ') 

С отличным python несет полную ответственность: не злоупотребляйте этой функцией!

Канонический максимальной длиной линии кодифицированного в PEP 8 составляет 80 символов, и канонический способ разделить метод цепь, начинать новые линии в точке:

result = text.lower().replace(string.punctuation, ' ') 
     .split(' ') 
+0

Приятное прикосновение к точке - не знал, что – volcano

1

Вы можете сделать это с одной переменной, доном 't нужно использовать несколько переменных, которые могут вызвать путаницу. Также код будет намного чище. Вы можете сделать это и в одной строке.

text = text.lower() 
text = text.replace(string.punctuation, ' ') 
text = text.split(' ') 

Также вы можете сделать это в одной строке

text = text.lower().replace(string.punctuation, ' ').split(' ') 
1

С помощью регулярных выражений, это еще чище

In [132]: split_str = re.compile(r'[{} ]+'.format(string.punctuation)) 

    In [133]: split_str.split("You can do it with one variable you don't have to use multiple variable which can cause confusion. Also code will be much cleaner. You can do it in one line also.") 
    Out[133]: 
    ['You', 
    'can', 
    'do', 
    'it', 
..... 
    'in', 
    'one',split_string = 
    'line', 
    'also', 
    ''] 
Смежные вопросы