#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, вы не заметите разницы.