@Abhijit: Główna różnica polega na tym, że poprosiłem o wszystkie zastrzeżone słowa, w tym wbudowane.
Neil G
edycja: najwyraźniej wiele osób używa „słowa zastrzeżonego” jako synonimu słowa kluczowego. Odpowiednio zredagowałem pytanie.
Neil G
@NeilG Jestem prawie pewien, że są to synonimy w Pythonie. Wbudowane słowa zdecydowanie nie są słowami zastrzeżonymi, ponieważ można je przypisać ponownie, np print = None.
wjandrea
Odpowiedzi:
198
Aby sprawdzić, czy ciąg jest słowem kluczowym, którego możesz użyć keyword.iskeyword; aby uzyskać listę zarezerwowanych słów kluczowych, których możesz użyć keyword.kwlist:
Należy zauważyć, że w python2.6 <= xy <3,0 Noneto nie formalnie kluczowe (zgodnie z kwlista iskeyword), ale to jest rzeczywiście kluczowe (bo None = 1nie z SyntaxError), mimo że jest wymieniony jako wbudowany razem z Truei False.
Bakuriu,
3
Tak z ciekawości, jakie jest filozoficzne uzasadnienie rozróżnienia między słowami kluczowymi a elementami wbudowanymi? Czy nie powinny one być po prostu zarezerwowane?
notconfusing
11
@notconfusing: słowa kluczowe są częścią gramatyki języka. Wbudowane zachowują się tak, jakbyś to zrobił from builtins import *; można je zastąpić.
Neil G
2
@notconfusing: W szczególności zminimalizowanie słów kluczowych oznacza, że popularne słowa nie są niepotrzebnie niedostępne w bezpiecznych scenariuszach. Jasne, przypisywanie set = 1to okropny pomysł, ale klasa z nazwaną metodą lub atrybutem set(więc zawsze odwołuje się do niej instance.set, a nie jako zwykła set), niekoniecznie jest okropna. Istnieją całkowicie uzasadnione przypadki nazwania metody set; gdyby setbyło słowem kluczowym, nie można tego zrobić.
ShadowRanger,
1
@wwii Specjalne nazwy metod nie są zdefiniowane globalnie jak polecenia wbudowane ani nie są częścią składni, jak słowa kluczowe. __len__sama w sobie nic nie znaczy. Musisz powiedzieć str.__len__lub list.__len__. Nie ma więc obaw, że nazwy zmiennych będą się z nimi kolidować.
print = None
.Odpowiedzi:
Aby sprawdzić, czy ciąg jest słowem kluczowym, którego możesz użyć
keyword.iskeyword
; aby uzyskać listę zarezerwowanych słów kluczowych, których możesz użyćkeyword.kwlist
:Jeśli chcesz zawierać wbudowany w nazwach, jak również (Python 3), a następnie sprawdzić ten
builtins
moduł :Dla Pythona 2 musisz korzystać z
__builtin__
modułuźródło
None
to nie formalnie kluczowe (zgodnie zkwlist
aiskeyword
), ale to jest rzeczywiście kluczowe (boNone = 1
nie zSyntaxError
), mimo że jest wymieniony jako wbudowany razem zTrue
iFalse
.from builtins import *
; można je zastąpić.set = 1
to okropny pomysł, ale klasa z nazwaną metodą lub atrybutemset
(więc zawsze odwołuje się do niejinstance.set
, a nie jako zwykłaset
), niekoniecznie jest okropna. Istnieją całkowicie uzasadnione przypadki nazwania metodyset
; gdybyset
było słowem kluczowym, nie można tego zrobić.__len__
sama w sobie nic nie znaczy. Musisz powiedziećstr.__len__
lublist.__len__
. Nie ma więc obaw, że nazwy zmiennych będą się z nimi kolidować.