Python « Наиболее изящный способ сделать первую букву строки заглавной в Python
Как наиболее изящно сделать только первую букву в строке заглавной?
Мой вариант такой, но можно ли его улучшить?
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .python.geshi_code {font-family:monospace;} .python.geshi_code .imp {font-weight: bold; color: red;} .python.geshi_code .kw1 {color: #ff7700;font-weight:bold;} .python.geshi_code .kw2 {color: #008000;} .python.geshi_code .kw3 {color: #dc143c;} .python.geshi_code .kw4 {color: #0000cd;} .python.geshi_code .co1 {color: #808080; font-style: italic;} .python.geshi_code .coMULTI {color: #808080; font-style: italic;} .python.geshi_code .es0 {color: #000099; font-weight: bold;} .python.geshi_code .br0 {color: black;} .python.geshi_code .sy0 {color: #66cc66;} .python.geshi_code .st0 {color: #483d8b;} .python.geshi_code .nu0 {color: #ff4500;} .python.geshi_code .me1 {color: black;} .python.geshi_code span.xtra { display:block; }
vals['name'] = vals['name'][0].upper() + vals['name'][1:]
Мой вариант такой, но можно ли его улучшить?
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .python.geshi_code {font-family:monospace;} .python.geshi_code .imp {font-weight: bold; color: red;} .python.geshi_code .kw1 {color: #ff7700;font-weight:bold;} .python.geshi_code .kw2 {color: #008000;} .python.geshi_code .kw3 {color: #dc143c;} .python.geshi_code .kw4 {color: #0000cd;} .python.geshi_code .co1 {color: #808080; font-style: italic;} .python.geshi_code .coMULTI {color: #808080; font-style: italic;} .python.geshi_code .es0 {color: #000099; font-weight: bold;} .python.geshi_code .br0 {color: black;} .python.geshi_code .sy0 {color: #66cc66;} .python.geshi_code .st0 {color: #483d8b;} .python.geshi_code .nu0 {color: #ff4500;} .python.geshi_code .me1 {color: black;} .python.geshi_code span.xtra { display:block; }
vals['name'] = vals['name'][0].upper() + vals['name'][1:]
1 ответов
Ваш метод возвратит исключение на пустой строке. Тут либо нужно гарантировать, что подаются непустые строки, либо ещё и впилить проверку (что сделает код ещё менее элегантным). Тем не менее, я бы сделал проверку и превратил бы это в функцию (а в js ещё бы впилил её в базовый класс).
Например так:
def capitalizeFirst (string):
if string:
return string[0].upper() + string[1:]
return string[:]
Ничего лучше вашего ппридумать не могу.
Если не по существу вопроса, то можно так:
vals['name'] = "".join(vals['name'][0].upper(), vals['name'][1:])
Немного костыльный вариант.
>>> s = 'i like CATS'
>>> s[:1].upper() + s[1:]или
>>> s[:1].upper() + s[1:]или
>>> s[:1].capitalize() + s[1:]
'I like CATS'
'I like CATS'
From django.utils.text
# Capitalizes the first letter of a string.
capfirst = lambda x: x and force_text(x)[0].upper() + force_text(x)[1:]
capfirst = allow_lazy(capfirst, six.text_type)
capfirst = lambda x: x and force_text(x)[0].upper() + force_text(x)[1:]
capfirst = allow_lazy(capfirst, six.text_type)
По моему все варианты немного не подходят, потому что не учитывается что первый символ может быть и не буквой, а пробелом или чем угодно. Вариант с регулярками еще не предлагался :)
s = u' ;%3№ первая буква заглавная'
capfirst = re.sub(ur'^([^а-яёa-z]*)([а-яёa-z])', lambda x: u'%s%s' % (x.group(1), x.group(2).upper()), s)
Выглядит, конечно, монструозно, зато вполне выполняет задачу)
capfirst = re.sub(ur'^([^а-яёa-z]*)([а-яёa-z])', lambda x: u'%s%s' % (x.group(1), x.group(2).upper()), s)
Выглядит, конечно, монструозно, зато вполне выполняет задачу)