Лучший список Python Именование, отличное от списка

Не лучше ли не называть переменные списка «списком»? Поскольку он конфликтует с зарезервированным ключевым словом python. Тогда какое имя лучше? «input_list» звучит как-то неловко.

Я знаю, что это может быть связано с конкретной проблемой, но, скажем, у меня есть функция быстрой сортировки, тогда quick_sort(unsorted_list) все еще довольно длинный, поскольку список, переданный функции сортировки, явно не отсортирован по контексту.

Есть идеи?


person clwen    schedule 16.10.2011    source источник
comment
Придирка: list не является зарезервированным ключевым словом (я полагаю, вы имеете в виду зарезервированный идентификатор или ключевое слово), это просто обычный идентификатор... он просто используется встроенным типом.   -  person    schedule 16.10.2011
comment
Python иногда бывает довольно многословным. Дизайнеры обычно предпочитают удобочитаемость краткости, хотя взгляните на списковые включения в качестве контрпримера. Так что не беспокойтесь слишком о том, сколько вам нужно напечатать, потому что с этим трудно бороться, и это хорошо для удобочитаемости.   -  person andronikus    schedule 16.10.2011


Ответы (7)


Мне нравится называть его во множественном числе того, что в нем есть. Так, например, если у меня есть список имен, я называю его names, а затем могу написать:

for name in names:

что я думаю, выглядит довольно красиво. Но, как правило, для вашего собственного здравомыслия вы должны называть свои переменные, чтобы вы могли знать, что они собой представляют, просто по имени. Это соглашение имеет дополнительное преимущество, заключающееся в том, что оно не зависит от типа, как и сам Python, потому что names может быть любым итерируемым объектом, таким как кортеж, словарь или ваш собственный пользовательский (итерируемый) объект. Вы можете использовать for name in names для любого из них, и если бы у вас был кортеж с именем names_list, это было бы просто странно.

(Добавлено из комментария ниже :) Есть несколько ситуаций, когда вам не нужно этого делать. Использование канонической переменной, такой как i, для индексации короткого цикла допустимо, потому что i обычно используется таким образом. Если ваша переменная используется более чем на одной странице кода, так что вы не можете увидеть все ее время жизни сразу, вы должны дать ей разумное имя.

person andronikus    schedule 16.10.2011
comment
+1, а если нет ничего конкретного (например, общая функция slice), есть много общих имен - xs/ys/zs для склонных к математике (довольно популярно в некоторых языках функционального программирования), objs, items и т. д. - person ; 16.10.2011
comment
Я чувствую, что это также Pythonic, хотя я не могу указать точное руководство. - person andronikus; 16.10.2011
comment
Из любопытства, что бы вы сделали, если бы у вас был список овец (или что-то еще, что не меняется при переходе в единственном и множественном числе)? - person Kevin; 18.06.2018
comment
@ Кевин Хахаха хорошая мысль. Существуют и другие соглашения, которые могут работать как sheep_list или sheep_arr. Если бы это был код, на который никто другой, скорее всего, не взглянет, я бы, наверное, использовал sheeps для смеха. - person andronikus; 19.06.2018
comment
flock_of_sheep, а просто goats, так как flock_of_goats не является пифоническим. - person Wolfgang Kuehn; 18.12.2018
comment
Как насчет варианта использования OP? Действительно ли quicksort(ints) лучше, чем quicksort(L)? - person kotchwane; 17.04.2021

goats

Имена переменных должны указывать на то, что они собой представляют, а не только на тип.

person Jakob Bowyer    schedule 16.10.2011

Python означает удобочитаемость. Таким образом, в основном вы должны называть переменные, которые способствуют удобочитаемости. См. PEP20.
У вас должно быть только общее правило согласованности, и вы должны нарушать эту согласованность в следующие ситуации:

  1. Применение правила сделает код менее читаемым даже для тех, кто привык читать код, который следует правилам.

  2. Чтобы соответствовать окружающему коду, который также нарушает его (возможно, по историческим причинам), хотя это также возможность навести порядок в чужом беспорядке (в истинном стиле XP).

Кроме того, используйте правила именования функций: нижний регистр со словами, разделенными символами подчеркивания, если это необходимо для улучшения читаемости.
Все это взято из PEP 8.

person Lelouch Lamperouge    schedule 16.10.2011

Я использую соглашение об именах, основанное на описательном имени и типе. (Кажется, я узнал об этом из сообщения в блоге Джеффа Этвуда, но не могу его найти.)

goats_list
for goat in goats_list : 
    goat.bleat()

cow_hash = {}

и т.п.

Все что сложнее (list_list_hash_list) делаю классом.

person David Poole    schedule 16.10.2011
comment
+1 за cow_hash. Звучит вкусно. Хотя я бы предпочел _dict для этой переменной, потому что они называются хешами только в любом другом языке программирования. Итак, не совсем рациональная причина, но вот так. По крайней мере, это проще для новых программистов, которые не знают, как работает словарь в глубине души. - person andronikus; 16.10.2011

А как насчет L?

person ovgolovin    schedule 16.10.2011
comment
Отныне я буду обращаться к вам как пользователь. - person ; 16.10.2011
comment
@delnan Не могли бы вы пояснить, почему использование таких имен является плохой практикой? Я думаю, что этот ответ хорошо быть здесь с комментариями, почему не рекомендуется использовать такие имена. - person ovgolovin; 16.10.2011
comment
Мой комментарий предназначен как пример того, почему это плохая идея. L для списка — как U для пользователя — не несет реальной информации, слишком короток и загадочен и не может использоваться для различения нескольких таких объектов (когда вам нужно хранить два списка в одной области, как вы вызываете их? L1 и L2?). - person ; 16.10.2011
comment
Я думаю, что здесь происходит две вещи: 1. Трудно запомнить более короткие имена переменных. Представьте себе, что вы имеете дело с длинным сценарием, в котором вещи называются L, l, s1, s2 и т. д. theList, theOtherList и т. д. было бы, по крайней мере, легче отслеживать. 2. Легче запомнить, что делает переменная, если у нее описательное имя. lines или crown_list или listOfCountries все ясно дают понять, что находится в списке. Вы, наверное, догадались, о чем я думал, и это было выдумано! - person andronikus; 16.10.2011
comment
@дельнан хорошо. Спасибо. Я проголосовал за ваш последний комментарий. Я оставлю ответ таким образом с комментариями (без редактирования ответа). - person ovgolovin; 16.10.2011
comment
Однако использование канонической переменной, такой как i, для индексации короткого цикла допустимо. Если переменная используется более чем на одной странице кода, где вы не можете сразу увидеть все ее время жизни, вы должны дать ей разумное имя. (Добавлено к моему ответу.) - person andronikus; 16.10.2011
comment
Это может показаться глупым, но это был хороший ответ для меня. Мне нужна функция, которая безопасно удаляет элемент из общего списка. def save_remove(l, item): try: l.remove(item) except ValueError: pass Так что, когда вы на самом деле не знаете, что в вашем списке, я - хороший выбор :) - person Hakaishin; 30.08.2018

Просто используйте lst или seq (для последовательности)

person Óscar López    schedule 16.10.2011
comment
Это довольно загадочно и не очень описательно. (Хотя это не мой минус.) - person ; 16.10.2011

Почему бы просто не использовать unsorted? Я предпочитаю иметь имена, которые передают идеи, а не типы данных. Есть особые случаи, когда важен тип переменной. Но в большинстве случаев это очевидно из контекста - как в вашем случае. Быстрая сортировка, очевидно, работает со списком.

person Achim    schedule 16.10.2011