170 похожих чатов

Def camel_case_to_snake(string: str) -> str: first_element = string[0]

list_string = list(string)
underscore = "_"
indexes_with_upper_symbol = [k for k, v in enumerate(string) if v.isupper()]

for count, index in enumerate(indexes_with_upper_symbol):
if index == 0:
string = string.replace(first_element, first_element.lower(), 1)
elif string[index - 1] == underscore:
continue
else:
list_string.insert(index + count, underscore)

return ''.join(list_string).lower()

string = "enforcesSecureChat"
print(camel_case_to_snake(string))

>>> enforces_secure_chat
Как этот прикол можно улучшить? (И в плане оптимизации, и в плане чистоты кода и всякое такое, вероятно, тут много лишнего)

20 ответов

28 просмотров

попробуй этой функции скормить пустую строку...

MagMigo- Автор вопроса

Хотя одно уже сам скажу: можно избавиться от переменной list_string и конкатенацией там делать

>>> def camel_case_to_snake(x): ... head, *tail = x.split('_') ... return head.lower() + ''.join(map(str.title, tail)) ... >>> camel_case_to_snake('fuck_this_shit') 'fuckThisShit' >>>

MagMigo- Автор вопроса

Это же получается уже snake_case_to_camel

Я б регексом бомбанул, наверное...

MagMigo- Автор вопроса
evle
Я б регексом бомбанул, наверное...

Регексы круто конечно, но я стараюсь избегать их (тут, соглашусь, пофиг вще, но раз уже есть такое, то почему бы и да)

MagMigo
Регексы круто конечно, но я стараюсь избегать их (...

Зачем избегать инструмент как раз там, где он удобен?

In [107]: camel_case_to_snake('HTTPServer') Out[107]: 'ht_t__tt___ttpserver'

желательно чтобы оно сначала вообще работало

Вообще, насколько тебе интересны не-ASCII символы?

MagMigo- Автор вопроса

Не интересны

MagMigo
Не интересны

regex.sub(r'([[:upper:]])', lambda x: f"_{x.group(0).lower()}", 'HTTPServer').strip('_') Если без учёта юникодовских символов, заменить regex на re и [:upper:] на A-Z. Ну и концептуально не решён вопрос с аббривеатурами.

evle
regex.sub(r'([[:upper:]])', lambda x: f"_{x.group(...

ну достаточно имхо простого правила "каждая заглавная стартует новую группу"

evle
regex.sub(r'([[:upper:]])', lambda x: f"_{x.group(...

Мне казалось, что в питоне [[:upper:]] не работает

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта