По-добро именуване на списък на Python, различно от list

По-добре ли е променливите в списъка да не се наричат ​​"списък"? Тъй като е в конфликт с ключовата дума python reserved. Тогава какво е по-доброто име? "input_list" звучи доста неудобно.

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

Някаква идея?


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


Отговори (7)


Обичам да го назовавам с множествено число на всичко, което е в него. Така че, например, ако имам списък с имена, аз го наричам names и след това мога да напиша:

for name in names:

което според мен изглежда доста хубаво. Но като цяло за собствен разум трябва да наименувате вашите променливи, така че да можете да знаете какви са те само от името. Тази конвенция има допълнителното предимство, че е агностична за тип, точно като самия Python, тъй като names може да бъде всеки итерируем обект като кортеж, dict или ваш собствен потребителски (итерируем) обект. Можете да използвате 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
@Kevin Хахаха добра гледна точка. Има други конвенции, които могат да работят като sheep_list или sheep_arr. Ако беше код, който никой друг нямаше да погледне, вероятно щях да използвам sheeps за смях. - person andronikus; 19.06.2018
comment
flock_of_sheep, но само goats, тъй като flock_of_goats не е pythonic. - 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
Отсега нататък ще се обръщам към вас с U за потребител. - 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
@delnan Добре. Благодаря. Гласувах за последния ти коментар. Ще оставя отговора по този начин с коментарите (без да редактирам отговора). - 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