camelize w pythonie

Napisano: 28 kwietnia 2011 20:47 Aktualizowano: 29 kwietnia 2011 11:03

Co chwilę odkrywam ciekawe konstrukcje, które można zastosować w pythonie, ciągle się uczę i na chwilę obecną Python bawi mnie bardziej, niż PHP. Ma swoje plusy i minusy, tak samo jak PHP, ale jest na tyle ciekawy, że warto się nad tym językiem pochylić.

Jakiś czas temu potrzebowałem "uwielbłądzić" ciąg znaków. Jak to osiagnąć? w Pythonie zajmie to tylko jedną linijkę kodu! Oczywiście przy założeniu, że kod jest dodatkowo sformatowany: jedna instrukcja, jedna linia:

Python code
  1. ''.join([chunk.strip().capitalize() for chunk in 'string_with_dashes'.split('_')])

Ta instrukcja zwróci nam ładnego stringa "StringWithDashes" którego z kolei możemu użyć w metodzie getattr, aby np. dynamicznie wywoływać metodę na obiekcie zależnie od wartości camelizowanego ciągu znaków.

Grzegorz Śliwiński

Komentarze (5)

jacek 29 kwietnia 2011 02:04 #1 replyreport
Gravatar photo
Ale że niby da się to w jednej linijce zrobić tylko w Pythonie?

PHP jedna linijka i to bez pętli (a można nawet skrócić, gdyby nie "_"):
str_replace(' ','',ucwords(str_replace('_',' ','string_with_dashes')));

albo z użyciem RegExp:
ucfirst(preg_replace_callback('/\_(.){1}/', create_function('$m', 'return strtoupper($m[1]);'), 'string_with_dashes'));

Ruby:
'string_with_dashes'.gsub!(/^[a-z]|\s+[a-z]/) { |a| a.upcase }.gsub!(/\s/,'')

a już absolutnym zwycięzcą jest RoR:
'string_with_dashes'.camelize

;)
fizyk 29 kwietnia 2011 09:51 #2 replyreport
Gravatar photo
RoR to jednak framework. W symfony też można to osiągnąć jedną metodą, zapewne w Zendzie równierz ;)
Jacek 29 kwietnia 2011 10:33 #3 replyreport
Gravatar photo
Tak, ale siła Ruby'ego sprawia, że jest jeszcze krócej, bo nie ma nawiasów () ;) Przyszlo mi jeszcze inne rozwiązanie do głowy - przesunięcie na kodzie ASCII. Też dałoby się to załatwić w jednej linijce :)
develucas 13 maja 2011 09:23 #4 replyreport
Gravatar photo
albo można też tak
s='string_wtih_dashes'
s.title().replace('_','')
fizyk 14 maja 2011 22:47 #5 replyreport
Gravatar photo
Python jest piękny ;) Patrzyłem na tą metodę, ale nie spodziewałem się, że skapitalizuje każdą literę po dashu.
Skomentuj!

Adres email nie zostanie opublikowany

Musi zaczynać się od http:// lub https://
Usuń odpowiedź