2014-05-12 15 views
7

Napisałem sporo mojego pierwszego znaczącego skryptu w języku Python. Właśnie zakończyłem czytanie PEP 8 i dowiedziałem się, że lower_case_with_underscores jest preferowane na przykład w nazwach zmiennych. Używałem mixedCase dla nazw zmiennych przez cały czas i chciałbym, aby mój kod był bardziej Pythoniczny, zmieniając je na lower_case_with_underscores, jeśli tak robimy tutaj.Python: jak zmienić nazwę partii wieloczęściowy na małe litery z podkreśleniami

Prawdopodobnie mógłbym napisać skrypt, który wyszukuje mixedCase i próbuje go elegancko zastąpić, ale zanim potencjalnie wymyślę nowe koło, moje pytanie brzmi: czy rozwiązanie już istnieje, czy to w edytorze Python-savvy, czy jako samodzielna aplikacja; lub czy istnieje inne podejście, które wykonałoby zadanie konwersji wszystkich nazw zmiennych mixedCase na lower_case_with_underscores. Szukałem jakiegoś rozwiązania, ale niczego nie zauważyłem. Dowolna technika, która konkretnie przyniosłaby taki wynik, byłaby doceniona.

+1

Potrzebne jest IDE z funkcjami refaktoryzacji (trzeba zmienić znaczniki lub przynajmniej dodać niektóre jako "ide"). Eclipse robi to (kursor na zmiennej, shift + alt + r), vim może to zrobić (przykro mi za perl: http://stackoverflow.com/questions/597687/changing-variable-names-in-vim), które edytor używasz? – Emilien

+0

Obecnie używam BBEdit dla OS X, który jest dobrym edytorem, ale nie jest właściwym IDE i nie ma specjalnych sprytów Pythona poza kolorowaniem składni. Dobra sugestia do zmiany tagów - czy masz jakąś opinię, czy Eclipse lub vim byłby lepszy dla tego konkretnego zadania? –

+0

Nie twierdzę, że zaćmienie, vim, BBedit czy jakikolwiek edytor jest lepszym edytorem, ale możesz zacząć tutaj: https://wiki.python.org/moin/IntegratedDevelopmentEnvironments i wybierz jedną z funkcją refaktoryzacji (np. PyCharm). – Emilien

Odpowiedz

10

udało mi się osiągnąć to, co chciałem za pomocą GNU sed:

sed -i -e :loop -re 's/(^|[^A-Za-z_])([a-z0-9_]+)([A-Z])([A-Za-z0-9_]*)'\ 
'([^A-Za-z0-9_]|$)/\1\2_\l\3\4\5/' -e 't loop' myFile.py 

Okazuje każde wystąpienie mixedCase - ale nie CapitalWords, więc nazwy klas pozostają nienaruszone - i zastępuje je lower_case_with_underscores; na przykład myVariable staje się moją_zmienną, ale MyClass pozostaje MyClass.

(W niepowiązanej notatce, teraz, gdy już to zrobiłem, myślę, że wolę wygląd mieszaniny mixedCase niż lower_case_with_underscores.) Występowanie wielu podkreśleń na całym moim kodzie jest dziwne, ale zrobię rzeczy w języku Python Sposób i zobacz, czy się do tego przyzwyczaję, szczególnie jeśli chcę, aby mój kod był widoczny lub pracował z innymi, lub może zrobię to tak, jak lubię i mam teraz prosty sposób na przekonwertowanie go do PEP 8 sposób, jeśli zamierzam upublicznić kod.)

+2

Kiedy piszę więcej kodu, stwierdziłem, że lower_case_with_underscore jest piękniejsze niż mixedCase w pythonie. (W moim C/C++ dorsza będę trzymać się mieszanek). Dzięki za twoje rozwiązanie. – JoYSword