개원#1. 변수는 식별자이며, 상태를 관리한다

정은경·2020년 5월 29일
0

로직을 처리한 결과는 '변수'에 재할당하여 변수를 참조할 때마다 그 값을 겾와 사용할 수 있다

1. 예약어 (keyword)

예약어도 변수처럼 사용하지만, '문법 규칙'에 정한 용도로만 사용!
즉! 예약어로는 변수를 정의할 수 없다!

>>> import sys
>>> sys.version_info
sys.version_info(major=3, minor=7, micro=7, releaselevel='final', serial=0)
>>>
>>>
>>> import keyword
>>> dir(keyword)
['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__',
'__name__', '__package__', '__spec__', 'iskeyword', 'kwlist', 'main']
>>>
>>> type(keyword.kwlist)
<class 'list'>
>>>
>>> len(keyword.kwlist)
35
>>>
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', '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']
>>>
>>>
>>> # 예약어를 변수로 사용하려고 하면  SyntaxError 발생!!!
>>> False = 'haha'
  File "<stdin>", line 1
SyntaxError: can't assign to keyword
>>>
>>>

2. 변수 이름을 짓는 문자열

예약어를 제외한 문자열로 변수의 이름을 정의할 수 있음!
파이썬은 유니코드 문자에 있는 다양한 언어로 변수를 정의할 수 있음!

>>> import string
>>> 
>>> dir(string)
['Formatter', 'Template', '_ChainMap', '_TemplateMetaclass', '__all__', 
'__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__',
'__package__', '__spec__', '_re', '_string', 'ascii_letters', 
'ascii_lowercase', 'ascii_uppercase', 'capwords', 'digits', 'hexdigits', 
'octdigits', 'printable', 'punctuation', 'whitespace']
>>>
>>>
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>>
>>> string.digits
'0123456789'
>>>
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>>
>>> string.whitespace
' \t\n\r\x0b\x0c'
>>>

3. 변수 이름 정의 규칙

문자열을 조합해서 변수/함수/클래스/모듈 등의 이름을 정의할 수 있음
작성한 이름을 관리하는 곳이 Name Space라고 함!
이름을 정의한느 방식이 모듈/클래스/함수/객체/변수/속성에 따라 조금씩 차이가 있음

Naming Convention

(1) 변수 이름:

  • 첫글자는 소문자
  • 캐멀케이스 => newName
  • 클래스/객체 내의 보호속성은 '_'로 시작
  • 클래스나 객체의 비공개 속성은 외부에서 직접 접근할 수 없게 이름을 변경하는 구조인 Mangling 처리 방식 => 이름 앞에 '_'를 붙이면 자동으로 '클래스' 이름이 붙여짐
  • 파이썬 내부에서만 사용되는 스페셜 속성/메소드는 이름 양쪽에 '__'를 붙여서 사용

4. 내장/전역 이름공간

  • 내장 모듈의 이름 공간
  • 정의해서 사용하는 모듈의 이름 공간
  • 내장 이름 공간 (builtin namespace)
  • 전역 이름 공간 (global namespace)

내장 이름공간 vs. 전역 이름공간

파이썬이 설치되면 자동으로 제공되는 함수와 클래스는 "builtins"에서 관리!
"builtins" 모듈의 특징은 import하지 않고 내부함수와 내부클래스를 사용한다는 점!

모듈 내 정의된 모든 변수를 관리하는 영역을 "전역 이름공간"이라고 함!
"globals"라는 내장함수는 전역 이름공간을 조회해서 딕셔너리로 반환!

전역 이름공간에 저장된 변수를 조회하는 내장함수 vars!

(1) builtins

>>> __builtins__
<module 'builtins' (built-in)>
>>> 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', 
'ModuleNotFoundError', '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', 'WindowsError', 
'ZeroDivisionError', '_', '__build_class__', '__debug__', '__doc__', 
'__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 
'all', 'any', 'ascii', 'bin', 'bool', 'breakpoint', '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']
>>>
>>> type(__builtins__)
<class 'module'>
>>>

(2) builtins.globals

>>> __builtins__.globals
<built-in function globals>
>>>
>>> type(__builtins__.globals)
<class 'builtin_function_or_method'>
>>>
>>> dir(__builtins__.globals)
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', 
'__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', 
'__init_subclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', 
'__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', 
'__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 
'__text_signature__']
>>>

(3) builtins.vars

>>> __builtins__.vars
<built-in function vars>
>>>
>>> type(__builtins__.vars)
<class 'builtin_function_or_method'>
>>>
>>> dir(__builtins__.vars)
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__']
>>>
>>> 
>>> jek = "hello"
>>> print(__builtins__.vars)
<built-in function vars>
>>> vars()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'jek': 'hello'}
>>>
>>> del jek
>>> vars()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>}
>>>

Reference

  • 한권으로 개발자가 원하던 파이썬 심화 A to Z, 문용준/문성혁 저
profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글