Python'a ayrılmış sözcüklerin ve yerleşiklerin listesi bir kitaplıkta mevcut mu?


135

Python'a ayrılmış sözcüklerin ve yerleşiklerin listesi bir kitaplıkta mevcut mu? Gibi bir şey yapmak istiyorum:

 from x.y import reserved_words_and_builtins

 if x in reserved_words_and_builtins:
     x += '_'


3
@Abhijit: Temel fark, yerleşikler de dahil olmak üzere tüm ayrılmış kelimeleri istediğim.
Neil G

edit: görünüşe göre birçok kişi anahtar kelime ile eşanlamlı olmak için "ayrılmış kelime" kullanın. Soruyu buna göre düzenledim.
Neil G

@NeilG Python ile eşanlamlı olduklarından eminim. Yerleşikler kesinlikle ayrılmış kelimeler değildir, çünkü yeniden atanabilirler, örn print = None.
wjandrea

Yanıtlar:


198

Bir dizenin anahtar kelime olduğunu doğrulamak için kullanabilirsiniz keyword.iskeyword; kullanabileceğiniz ayrılmış anahtar kelimelerin listesini almak için keyword.kwlist:

>>> import keyword
>>> keyword.iskeyword('break')
True
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 
 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 
 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 
 'while', 'with', 'yield']

Eğer eklemek istiyorsanız yerleşik isimlerin yanı (Python 3), sonra kontrol modülü :builtins

>>> import builtins
>>> dir(builtins)
['ArithmeticError', 'AssertionError', 'AttributeError',
 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning',
 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError',
 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError',
 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError',
 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError',
 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError',
 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError',
 'MemoryError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented',
 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning',
 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError',
 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration',
 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit',
 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError',
 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '_',
 '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__',
 '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool',
 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex',
 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval',
 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr',
 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int',
 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map',
 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow',
 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set',
 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple',
 'type', 'vars', 'zip']

Python 2 için modülü kullanmanız gerekir__builtin__

>>> import __builtin__
>>> dir(__builtin__)
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BufferError', 'BytesWarning', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'NameError', 'None', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError', 'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError', '_', '__debug__', '__doc__', '__import__', '__name__', '__package__', 'abs', 'all', 'any', 'apply', 'basestring', 'bin', 'bool', 'buffer', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'cmp', 'coerce', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'execfile', 'exit', 'file', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'intern', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'long', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'unichr', 'unicode', 'vars', 'xrange', 'zip']

11
Python2.6 içinde <= xy <3,0 olduğu Not Noneolduğu değil (uygun resmen bir anahtar kelime kwlistve iskeyword) ama olduğu (çünkü aslında bir anahtar kelime None = 1bir başarısız olur SyntaxErroryerleşik olarak birlikte Listeleniyorsa rağmen) Trueve False.
Bakuriu

3
Sadece meraktan, anahtar kelimeler ve yerleşik anahtar kelimeler arasında ayrım yapmak için felsefi gerekçe nedir? Hepsi rezerve edilmemeli miydi?
14'te

12
@notconfusing: anahtar kelimeler dilin dilbilgisinin bir parçasıdır. Builtins yapmış gibi davranır from builtins import *; geçersiz kılınabilirler.
Neil G

2
@notconfusing: Özellikle, anahtar kelimeleri küçültmek, yaygın kelimelerin güvenli senaryolarda gereksiz yere kullanılamayacağı anlamına gelir . Elbette, atama set = 1korkunç bir fikirdir, ancak bir yöntem veya özniteliğe sahip bir sınıf set(her zaman instance.setdüz olarak değil, her zaman başvurulur set) mutlaka korkunç değildir. Bir yöntemi adlandırmak için mükemmel yasal durumlar vardır set; setbir anahtar kelime olsaydı , bunu yapamazdınız.
ShadowRanger

1
@wwii Özel yöntem adları genel olarak yerleşikler veya sözdizimi benzeri anahtar kelimelerin bir parçası olarak tanımlanmamıştır. __len__kendi başına hiçbir şey ifade etmez. Sen söylemek zorunda str.__len__ya list.__len__. Dolayısıyla, değişken adlarınızın onlarla çarpışması konusunda endişelenmeyin.
Nick S
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.