Pochodząca z tła C # konwencja nazewnictwa zmiennych i nazw metod to zwykle camelCase lub PascalCase:
// C# example
string thisIsMyVariable = "a"
public void ThisIsMyMethod()
W Pythonie widziałem powyższe, ale widziałem także używane podkreślenia:
# python example
this_is_my_variable = 'a'
def this_is_my_function():
Czy istnieje bardziej preferowany, ostateczny styl kodowania dla Pythona?
python
variables
function
naming-conventions
Promień
źródło
źródło
findMeAClass
jest może brzydszy niżfind_me_a_class
.Google Python Style Guide ma następującą konwencją:
Podobny schemat nazewnictwa należy zastosować do
CLASS_CONSTANT_NAME
źródło
property
... być może chodzi o to, czym ten przedmiot udaje, a nie o to, czym w rzeczywistości jestDavid Goodger (w „Code Like a Pythonista” tutaj ) opisuje zalecenia PEP 8 w następujący sposób:
joined_lower
dla funkcji, metod, atrybutów, zmiennychjoined_lower
lubALL_CAPS
dla stałychStudlyCaps
na zajęciacamelCase
tylko w celu zachowania zgodności z wcześniej istniejącymi konwencjamiźródło
joined_lower
na stałe , tylko „wszystkie litery z podkreślenia oddzielania słów”. Ciekawe także na temat nowej funkcji wyliczania .StudlyCaps for classes
to świetna uniwersalna zasada dla klas w prawie wszystkich językach. Więc dlaczego niektóre wbudowane klasy Pythona (takie jakdatetime.datetime
nie przestrzegają tej konwencji?unittest.TestCase.assertEqual
i przyjaciele nie przestrzegają konwencji węża. Prawda jest taka, że niektóre części standardowej biblioteki Pythona zostały opracowane przed utrwaleniem się konwencji i teraz utknęliśmy z nimi.Jak przyznaje przewodnik po stylu dla kodu Python ,
Zauważ, że odnosi się to tylko do standardowej biblioteki Pythona . Jeśli nie są w stanie uzyskać takiej spójności, nie ma prawie żadnej nadziei na przyjęcie ogólnie przyjętej konwencji dla całego kodu Pythona, prawda?
Z tego i dyskusji tutaj wywnioskowałbym, że to nie jest straszny grzech, jeśli ktoś nadal używa np. (Jasnych i dobrze ugruntowanych) konwencji nazewnictwa dla zmiennych i funkcji przy przechodzeniu do Pythona. Pamiętając oczywiście, że najlepiej postępować zgodnie z dominującym stylem bazy kodu / projektu / zespołu. Jak wskazuje Przewodnik po stylu Python, najważniejsza jest spójność wewnętrzna .
Odrzuć mnie jako heretyka. :-) Podobnie jak OP, nie jestem „Pythonistą”, jeszcze nie.
źródło
Istnieje PEP 8 , jak pokazują inne odpowiedzi, ale PEP 8 jest tylko przewodnikiem po stylach dla standardowej biblioteki i jest w niej tylko ewangelią. Jednym z najczęstszych odchyleń PEP 8 dla innych fragmentów kodu jest nazywanie zmiennych, szczególnie dla metod. Nie ma jednego dominującego stylu, chociaż biorąc pod uwagę objętość kodu, który używa mixedCase, gdyby wykonać ścisły spis, prawdopodobnie powstałaby wersja PEP 8 z mixedCase. Istnieje niewiele innych odchyleń od PEP 8, które są równie powszechne.
źródło
Jak wspomniano, PEP 8 mówi o używaniu
lower_case_with_underscores
zmiennych, metod i funkcji.Wolę używać
lower_case_with_underscores
zmiennych, a takżemixedCase
metod i funkcji, aby kod był bardziej wyraźny i czytelny. Zatem podążanie za Zenem Pythona „wyraźne jest lepsze niż niejawne” i „liczy się czytelność”źródło
w odpowiedzi na odpowiedź @JohnTESlade. Przewodnik po stylu pythonowym Google zawiera kilka fajnych rekomendacji,
Nazwy, których należy unikać
\__double_leading_and_trailing_underscore__ names
(zarezerwowane przez Python)Konwencja nazewnictwa
CapWords
dla nazw klas, alelower_with_under.py
dla nazw modułów. Chociaż istnieje wiele istniejących modułów oCapWords.py
tej nazwie , jest to odradzane, ponieważ jest mylące, gdy moduł nazywa się po klasie. („czekaj - pisałemimport StringIO
czyfrom StringIO import StringIO
?”)Wytyczne oparte na zaleceniach Guido
źródło
Większość ludzi w Pythonie woli podkreślenia, ale nawet ja używam Pythona od ponad 5 lat, nadal ich nie lubię. Po prostu wyglądają dla mnie brzydko, ale może to wszystko Java w mojej głowie.
Po prostu lubię CamelCase, ponieważ lepiej pasuje do sposobu, w jaki nazywane są klasy. To bardziej logiczne
SomeClass.doSomething()
niż miećSomeClass.do_something()
. Jeśli rozejrzysz się w globalnym indeksie modułów w pythonie, znajdziesz oba, co wynika z faktu, że jest to zbiór bibliotek z różnych źródeł, które rosły z czasem, a nie coś, co zostało opracowane przez jedną firmę, np. Sun, z surowymi regułami kodowania . Powiedziałbym, że sedno brzmi: Użyj tego, co lubisz lepiej, to tylko kwestia osobistego gustu.źródło
make_xpath_predicate
,make_xpath_expr
,make_html_header
,make_html_footer
SomeClass.doSomething()
(metody statyczne są na ogół rzadkie), zwykle dzwoniszan_instance.do_something()
Osobiście staram się używać CamelCase do klas, metod i funkcji mixedCase. Zmienne są zwykle oddzielane podkreśleniem (kiedy pamiętam). W ten sposób mogę na pierwszy rzut oka powiedzieć, do czego dokładnie dzwonię, a nie wszystko wygląda tak samo.
źródło
Jest artykuł na ten temat: http://www.cs.kent.edu/~jmaletic/papers/ICPC2010-CamelCaseUnderScoreClouds.pdf
TL; DR Mówi, że snake_case jest bardziej czytelny niż camelCase. Dlatego współczesne języki używają (lub powinny) używać węża tam, gdzie to możliwe.
źródło
Styl kodowania jest zwykle częścią wewnętrznych standardów polityki / konwencji organizacji, ale myślę, że generalnie styl all_lower_case_underscore_separator (zwany również snake_case) jest najczęściej spotykany w pythonie.
źródło
Osobiście korzystam z konwencji nazewnictwa Java podczas programowania w innych językach programowania, ponieważ jest on spójny i łatwy do naśladowania. W ten sposób nie nieustannie walczę o to, jakich konwencji użyć, co nie powinno być najtrudniejszą częścią mojego projektu!
źródło
library_function(my_arg)
).Zazwyczaj stosuje się konwencje stosowane w standardowej bibliotece języka.
źródło