Wkładam trochę wysiłku w naukę języka Python i zwracam szczególną uwagę na wspólne standardy kodowania. To może wydawać się bezcelowe, wybredne pytanie, ale staram się skupiać na najlepszych praktykach, kiedy się uczę, więc nie muszę się uczyć żadnych „złych” nawyków.
Widzę dwie typowe metody inicjowania nagrania:
a = {
'a': 'value',
'another': 'value',
}
b = dict(
a='value',
another='value',
)
Który uważa się za „bardziej pythonowy”? Z którego korzystasz Czemu?
python
dictionary
daotoad
źródło
źródło
{}
dość jednolicie, ale widzę wiele wyraźnegodict()
podejścia gdzie indziej. Widziałem korzyści z wyraźnej składni, ale brak podejścia w oficjalnych dokumentach wzbudził we mnie podejrzenia. Po opublikowaniu tego, przejrzałem dokumenty bibliotecznedict
i znalazłem ostrożność, że klucze muszą być prawidłowymi identyfikatorami, gdy jawnedict
jest używane do inicjowania nagrania.dict()
jest napisane -dict
używa nazwy typu. Nawiasy klamrowe ({}
) polegają na interpunkcji w celu identyfikacji typu.Odpowiedzi:
Nawiasy klamrowe. Przekazywanie argumentów słów kluczowych do
dict()
, choć działa pięknie w wielu scenariuszach, może zainicjować mapę tylko wtedy, gdy klucze są poprawnymi identyfikatorami Pythona.To działa:
To nie zadziała:
źródło
Pierwsze, kręcone szelki. W przeciwnym razie wystąpią problemy z spójnością z kluczami, które zawierają w sobie nieparzyste znaki, np
=
.źródło
Preferowana jest pierwsza wersja:
{1: 'one', 2: 'two'}
. Drugi wariant działa tylko dla (niektórych) kluczy ciągów. Stosowanie różnych rodzajów składni w zależności od rodzaju kluczy byłoby niepotrzebną niespójnością.To jest szybsze:
źródło
Myślę, że pierwsza opcja jest lepsza, ponieważ masz zamiar uzyskać dostęp do wartości jako [„a”] lub [„inny”]. Klucze w twoim słowniku są łańcuchami i nie ma powodu udawać, że nie są. Dla mnie składnia słowa kluczowego na początku wygląda na sprytną, ale na drugi rzut oka jest niejasna. Ma to dla mnie sens tylko wtedy, gdy pracujesz
__dict__
, a słowa kluczowe staną się później atrybutami, coś w tym rodzaju.źródło
Do Twojej wiadomości, na wypadek gdybyś musiał dodać atrybuty do słownika (rzeczy, które są dołączone do słownika, ale nie są jednym z kluczy), będziesz potrzebować drugiej formy. W takim przypadku możesz zainicjować słownik za pomocą klawiszy o dowolnych znakach, pojedynczo:
źródło
Czasami
dict()
jest dobrym wyborem:[random.randint (0,100) dla xw zakresie (0,7)]))
źródło
Prawie zawsze używam nawiasów klamrowych; jednak w niektórych przypadkach, w których piszę testy, pakuję / rozpakowuję słowa kluczowe, aw tych przypadkach dict () jest znacznie łatwiejszy w utrzymaniu, ponieważ nie muszę zmieniać:
do:
Pomaga również w niektórych okolicznościach, w których myślę, że w późniejszym czasie mogę chcieć przekształcić je w instancję nazwaną lub klasową.
W samej implementacji, z powodu mojej obsesji na punkcie optymalizacji, a kiedy nie widzę szczególnie dużych korzyści w zakresie konserwacji, zawsze będę faworyzować nawiasy klamrowe.
W testach i implementacji nigdy nie użyłbym dict (), jeśli istnieje szansa, że klucze dodane wtedy lub w przyszłości:
dict(1foo=2)
podnosi błąd SyntaxError)źródło