Jaka jest konwencja nazewnictwa w Pythonie dla nazw zmiennych i funkcji?

Pochodzące z tła C# konwencja nazewnictwa dla zmiennych i nazw metod są zwykle albo CamelCase lub Pascal Case:

// C# example
string thisIsMyVariable = "a"
public void ThisIsMyMethod()

W Pythonie widziałem powyższe, ale widziałem też używane podkreślniki:

# python example
this_is_my_variable = 'a'
def this_is_my_function():

Czy istnieje bardziej preferowany, definitywny styl kodowania w Pythonie?

Author: SilentGhost, 2008-10-02

12 answers

Patrz Python PEP 8 .

Nazwy funkcji powinny być małymi literami, ze słowami oddzielonymi podkreślnikami jako niezbędne do poprawy czytelności.

MixedCase jest dozwolone tylko w kontekstach gdzie to już przeważa styl

Zmienne...

Użyj reguł nazewnictwa funkcji: małe litery ze słowami oddzielonymi przez podkreśla konieczność poprawy czytelność.

[[2]}osobiście odbiegam od tego, ponieważ preferuję również mixedCase nad lower_case dla własnych projektów.
 679
Author: S.Lott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-02 01:19:30

Google Python Style Guide ma następującą konwencję:

Module_name, package_name, ClassName, method_name, ExceptionName, function_name, GLOBAL_CONSTANT_NAME, global_var_name, instance_var_name, function_parameter_name, local_var_name

Podobny schemat nazewnictwa powinien być stosowany do CLASS_CONSTANT_NAME

 515
Author: JohnTESlade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-03 16:40:35

David Goodger (w" Code Like A Pythonist " tutaj) opisuje zalecenia PEP 8 w następujący sposób:

  • joined_lower dla funkcji, metod, atrybuty, zmienne

  • joined_lower lub ALL_CAPS dla stałe

  • StudlyCaps dla klas

  • camelCase tylko w celu dostosowania się do istniejące konwencje

 198
Author: unmounted,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-20 08:58:56

Jak przyznaje Style Guide for Python Code ,

Konwencje nazewnictwa Pythona Biblioteka jest trochę bałagan, więc będziemy nigdy nie uzyskuj tego całkowicie spójnego

Zauważ, że odnosi się to tylko do standardowej biblioteki Pythona . Jeśli nie mogą uzyskaćtego spójnego, to prawie nie ma nadziei na posiadanie ogólnie przyjętej konwencji dlacałego kodu Pythona, prawda?

Z tego, a dyskusja tutaj, chciałbym wydedukuj, że jest to a nie straszny grzech, jeśli nadal używa się na przykład Javy lub C#(jasnych i dobrze ugruntowanych) konwencji nazewnictwa dla zmiennych i funkcji podczas przechodzenia do Pythona. Pamiętając, oczywiście, że najlepiej jest trzymać się tego, jaki jest dominujący styl dla bazy kodu / projektu/zespołu. Jak wskazuje Przewodnik po stylach Pythona, wewnętrzna spójność ma największe znaczenie.

możesz mnie odrzucić jako heretyka. :- ) Jak OP, nie jestem "Pythonista", jeszcze nie.

 37
Author: Jonik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-13 22:28:30

Istnieje PEP 8 , Jak pokazują inne odpowiedzi, ale PEP 8 jest tylko przewodnikiem stylu dla standardowej biblioteki i jest w niej traktowany tylko jako Ewangelia. Jednym z najczęstszych odchyleń PEP 8 dla innych fragmentów kodu jest nazewnictwo zmiennych, szczególnie dla metod. Nie ma jednego dominującego stylu, chociaż biorąc pod uwagę objętość kodu, który używa mixedCase, jeśli ktoś miałby dokonać ścisłego spisu, prawdopodobnie skończyłby z wersją PEP 8 z mixedCase. Jest niewiele innych odchylenie od PEP 8, które jest tak samo powszechne.

 32
Author: Thomas Wouters,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-01 21:12:41

Jak wspomniano, PEP 8 mówi, aby używać lower_case_with_underscores dla zmiennych, metod i funkcji.

Preferuję użycie lower_case_with_underscores dla zmiennych i mixedCase dla metod i funkcji sprawia, że kod jest bardziej wyraźny i czytelny. W Pythonie, Pythonie, Pythonie, Pythonie, Pythonie, Pythonie, Pythonie, Pythonie, Pythonie, Pythonie, Pythonie, Pythonie, Pythonie, Pythonie, Pythonie, Pythonie, Pythonie]}

 27
Author: claytron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-05 02:51:29

Osobiście staram się używać CamelCase dla klas, metod mixedCase i funkcji. Zmienne są zazwyczaj oddzielone podkreśleniem (o ile pamiętam). W ten sposób mogę powiedzieć na pierwszy rzut oka, co dokładnie nazywam, a nie wszystko wygląda tak samo.

 15
Author: crystalattice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-02 03:24:30

Większość ludzi Pythona woli podkreślenia, ale nawet ja używam Pythona od ponad 5 lat, nadal ich nie lubię. Dla mnie wyglądają brzydko, ale może to tylko Java w mojej głowie.

Po prostu wolę CamelCase, ponieważ lepiej pasuje do nazw klas, bardziej logiczne wydaje się mieć SomeClass.doSomething() niż 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ódła, które rosły w nadgodzinach, a nie coś, co zostało opracowane przez jedną firmę jak Sun z surowymi zasadami kodowania. Powiedziałbym, że najważniejsze jest to: używaj, co chcesz lepiej, to tylko kwestia osobistego gustu.

 13
Author: André,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-11 20:01:29

Jest o tym Artykuł: 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, gdzie tylko mogą.

 7
Author: alebian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-22 23:13:52

Dalej do tego, co odpowiedział @ JohnTESlade. przewodnik po stylu Pythona Google ' a ma całkiem zgrabne zalecenia,

Nazwy, których należy unikać

  • nazwy pojedynczych znaków z wyjątkiem liczników lub iteratorów
  • myślniki ( - ) w dowolnej nazwie pakietu/modułu
  • \__double_leading_and_trailing_underscore__ names (reserved by Python)

Konwencja Nazewnictwa

  • "wewnętrzny" oznacza wewnętrzny moduł lub chroniony lub prywatny w ramach klasy.
  • Prepending a pojedynczy podkreślnik ( _ ) ma pewne wsparcie dla ochrony zmiennych i funkcji modułu(nie dołączone do import * from). Prepending podwójnego podkreślenia ( _ _ ) do zmiennej lub metody instancji skutecznie służy do uczynienia zmiennej lub metody prywatną do jej klasy (użycie nazwy mangling).
  • umieść powiązane klasy i funkcje najwyższego poziomu razem w module. W przeciwieństwie do Javy, nie ma potrzeby ograniczania się do jednej klasy na moduł.
  • użyj CapWords dla nazw klas, ale lower_with_under.py dla modułu nazwiska. Chociaż istnieje wiele istniejących modułów o nazwie CapWords.py, jest to odradzane, ponieważ jest to mylące, gdy moduł ma nazwę pochodzącą od klasy. ("czekaj-czy ja napisałem import StringIO Czy from StringIO import StringIO?")

Wytyczne wynikające z zaleceń Guido Tutaj wpisz opis obrazka

 6
Author: Sufiyan Ghori,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-08 22:39:13

Styl kodowania jest zwykle częścią wewnętrznej polityki organizacji/standardów konwencji, ale myślę, że ogólnie, styl all_lower_case_underscore_separator (zwany także snake_case) jest najczęściej spotykany w Pythonie.

 3
Author: fuentesjr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-04 17:17:47

Zazwyczaj stosuje się konwencje używane w bibliotece standardowej języka.

 0
Author: yfeldblum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-02 03:55:18