Странное поведение функции .capitalize

#python

#python

Вопрос:

Я сопоставил странное поведение функции .capitalize с reduce .

 from functools import reduce
def camel_case(string):
    return reduce(lambda x,y:x.capitalize() y.capitalize(),string.split())
  

и в результате camel_case('camel case word') 'CamelcaseWord' , когда я использую .upper() , например, все работает нормально.

Что я неправильно понимаю? Спасибо всем за ответ!

Комментарии:

1. Каков ваш ожидаемый результат?

2. Вместо reduce этого вы можете str.title().replace(" ", "") сделать это.

3. И если вам действительно нужно использовать reduce , правильный способ сделать это — использовать пустую строку в качестве аргумента инициализатора: reduce((lambda a, b: a b.capitalize()), iterable, "")

Ответ №1:

поскольку вы используете reduce функцию, когда вы вызываете camel_case с ‘camel case word’, это эквивалентно следующему коду:

 x,y,z = s.split()
(x.capitalize()   y.capitalize()).capitalize()   z.capitalize()
  

Теперь 3-я заглавная буква (слева) переведет все символы в нижний регистр, а первый символ станет прописным, так что вы получите

 (x.capitalize()   y.capitalize()).capitalize() 
  

равно ‘Camelcase’ и,

 z.capitalize()
  

равно «Слову». Отсюда и результат.

Теперь, когда вы используете upper , вызов (x.upper() y.upper()).upper() эквивалентен x.upper() y.upper() so, вы не заметите разницы.