이제 파이썬에 대해 알아보게 되네용!
처음 파이썬 할 때는 R이랑 사소한 것들이 헷갈려서 정 붙이기가 쉽지 않았는데..
저도 공부해볼 겸 여러분들도 정 붙이는 계기가 되길..ㅠㅠ
(1) 클래스와 자료형(data type)
-파이썬은 객체지향 언어입니다. 클래스는 객체지향 언어에서 객체를 정의하는 수단이 됩니다.
파이썬의 모든 자료형이 클래스(bool, int, float, complex, str, range, list, tuple, set, dict 등)로 구현되어 있으므로, 클래스 이름은 자료형이 됩니다.
간단하게 type(object) 함수로 object의 자료형 타입을 반환할 수 있습니다.
(2) 객체와 인스턴스(instance)
-객체와 인스턴스는 혼용됩니다. 객체는 클래스에 의해 생성됩니다. ex) 10은 int 클래스의 객체, 실수 3.02는 float의 객체입니다.
이것은 isinstance(object, classinfo)함수로 object가 classinfo의 클래스이면 True 아니면 False로 반환됩니다.
- 모든 객체는 클래스 이름은 자료형(Type)을 갖고, 유일한 고유번호(identity)를 갖습니다. 자료형은 내장함수 type()으로 확인하고,
고유번호는 내장함수 id()로 확인합니다. 변수의 값이 같은지 확인할 때는 R과 마찬가지로 == 연산자를 사용합니다.
(3) 속성 (attribute)
-객체를 정의하는 수단인 클래스에는 변수와 함수가 정의되어 있습니다. 클래스에 정의된 변수와 함수르 객체의 속성이라 합니다.
클래스에 정의된 함수는 메소드(Method)라 합니다.
object.identifier (identifier는 변수 또는 메소드가 됩니다.)
(4) 값, 변경 가능, 변경 불가능
-객체의 고유번호 변경 없이 값이 변경될 수 있으면 변경 가능(mutable), 변경 없이 값이 변경될 수 없으면 변경 불가능(immutable)이라 합니다.
숫자형(bool, int, float, complex), 문자형(str, bytes), 튜플(tuple)은 변경 불가능 자료형
사전(dict), 리스트(list) 등은 변경 가능 자료형입니다.
* 변경 불가능 자료형에서 새로운 값을 계산하는 연산은 같은 자료형과 값을 갖는 이미 존재하는 객체로의 참조(reference)를
반환합니다. 변경 불가능 자료형인 int형의 a=1 ; b=1 에서 변수 a,b는 파이썬 인터프리터 구현에 따라 값 1를 갖는 객체를
참조할 수 도 있고 아닐 수도 있습니다. CPython 구현에서는 값 1을 갖는 객체를 참조한다고 합니다.
그러나, 변경 가능 자료형인 list에서 c=[] ; d=[] 에서, 변수 c,d는 서로 다른 공백 리스트를 참조합니다.
(그러나 c=d=[]에서 변수 c,d는 같은 공백 리스트를 참조)
주의할 점은, a=1 ; a=2에서 정수형 변수 객체 a의 값이 1에서 2로 변경 가능하다고 해서 정수 자료형인 int형이
변경 가능 자료형은 아닙니다.왜냐하면 , a=1 이후의 id(a)와 a=2 이후의 id(a)는 다르기 때문입니다.
(5) 지정문과 변수
-지정문(assignment statement)은 이름에 값을 바인딩 하기 위해 사용하거나, 변경 가능 객체의 속성 또는 항목을 수정하기 위해
사용합니다. 변수는 값이 변경 가능한 이름을 의미합니다. 변수 = 연산자에 의한 지정문에서 변수=수식 형태로 사용됩니다.
즉, 오른쪽 수식의 계산된 객체를 왼쪽 변수가 참조합니다.
= 연산자 왼쪽은 변수만 가능하며, 하나 이상의 변수가 올 수 있습니다.
a = 5*3+2 이런 것과 a=b=c=5*3+2 이런 것을 예로 들 수 있습니다.
(6) dir([object]) 함수
-dir()함수는 object를 생략하면, 현재 스코프(current scope)에서 사용 가능한 이름들의 리스트를 반환합니다. 즉 사용 가능한 속성(변수, 메소드)을 확인합니다.
참고로, dir() 또는 dir(object)처럼 사용 가능합니다.
즉, 1) dir()은 현재 스코프에서 사용 가능한 이름들의 리스트
2) dir(object)는 object 객체에서 사용 가능한 이름 리스트
(7) globals(), locals()함수
-globals()함수는 전역 스코프(global scope)에서 사용 가능한 name:value 쌍의 사전(dict)을 반환합니다.
locals()함수는 지역 스코프(local scope)에서 사용 가능한 name:value 쌍의 사전(dict)을 반환합니다.
## 위에서 했던 것들의 예제
>>> a=1
>>> type(a)
<class 'int'>
>>> type(1)
<class 'int'>
>>> isinstance(1, int)
True
>>> isinstance(a, int)
True
>>> a
1
>>> id(a)
1478416176
>>> a=2
>>> id(a)
1478416192 # a가 1이었던 것과 2였던 것의 id 값이 다름
>>> b=a
>>> id(b)
1478416192
>>> a,b # 결과값을 tuple 형태로 반환
(2, 2)
>>> a==b
True
>>> a is b
True
>>> a=1
>>> b=1
>>> a is b is 1
True
>>> id(a), id(b), id(1)
(1478416176, 1478416176, 1478416176)
## 예제 2
>>> c=[]
>>> d=[]
>>> type(c), type(d) #c, d의 자료형은 모두 list다
(<class 'list'>, <class 'list'>)
>>> c,d
([], [])
>>> id(c), id(d) #c, d의 고유변호는 다르다. 같은 공백 리스트를 참조하지 않는다.
(34443056, 34442296)
>>> c==d
True
>>> c is d # c==d 값 비교는 True, c is d 고유번호 비교는 다르므로 False.
False
>>> c.append(1)
>>> d.append(1) #c, d에 정수 1을 추가
>>> c,d,
([1], [1])
>>> id(c), id(d) # 역시 고유번호는 다르다.
(34443056, 34442296)
>>> id(c[0]),id(d[0]), id(1) # 여기서 id(c[0])과 id(d[0])은 정수형 상수 1을 참조합니다. 따라서 고유번호가 같다!
(1478416176, 1478416176, 1478416176)
>>> c[0] = 10
>>> d[0] = 20 # c[0] 값을 10으로, d[0] 값을 20으로 변경
>>> c,d
([10], [20])
>>> id(c), id(d) # 10, 20으로 변경된 값의 고유번호가 공백 리스트였을 때와 같습니다. 즉 고유번호를 변경하지 않고 값이 변경됩니다.(mutable)
(34443056, 34442296)
>>> id(c[0]), id(d[0]) # 정수형으로 고유변호가 변경됩니다. (immutable)
(1478416320, 1478416480)
## 예제 3
>>> a=10
>>> A=20
>>> a,A
(10, 20)
>>> 변수1=30
>>> 변수2=변수1+a+A
>>> 변수1, 변수2
(30, 60)
>>> 1A=1 # 숫자로 시작하는 변수 불가
SyntaxError: invalid syntax # 파이썬에서 허용하지 않는 문법이라는 의미.
>>> A@=1 # @ 때문에 문법 오류
Traceback (most recent call last):
File "<pyshell#45>", line 1, in <module>
A@=1
TypeError: unsupported operand type(s) for @=: 'int' and 'int'
>>> 1=A
SyntaxError: can't assign to literal # 변수에 정수형 상수 리터럴 1을 사용할 수 없다는 의미.
>>> a=b=c=0 # a is b is c is 0은 TRUE
>>> print(a,b,c)
0 0 0
>>> a,b=10, 20 # 내부적으로 Tuple형 이용
>>> print(a,b)
10 20
>>> a,b=b,a # 두 변수가 교환되서 id(a), id(b)가 교환된다.
>>> print(a,b)
20 10
>>> a, *b = 1,2,3 # a=1, b=[2,3]
>>> print(a,b)
1 [2, 3]
>>> *a,b=1,2,3 # a=[1,2], b=3
>>> print(a,b)
[1, 2] 3
>>> a,b,c="abc"
>>> a,b,c
('a', 'b', 'c')
## 예제 4
>>> a=1
>>> dir()
['A', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'b', 'c', 'd', '변수1', '변수2']
>>> globals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': 1, 'b': 'b', 'c': 'c', 'd': [20], 'A': 20, '변수1': 30, '변수2': 60}
>>> locals()
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <class '_frozen_importlib.BuiltinImporter'>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': 1, 'b': 'b', 'c': 'c', 'd': [20], 'A': 20, '변수1': 30, '변수2': 60}
>>> a
1
>>> del a
>>> dir() # a가 삭제됨.
['A', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'b', 'c', 'd', '변수1', '변수2']
>>> a
Traceback (most recent call last):
File "<pyshell#69>", line 1, in <module>
a
NameError: name 'a' is not defined # a가 삭제되어 NameError 발생
>>> 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', '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 (Linux)' 카테고리의 다른 글
6. Python - 머신러닝에 앞서서 (0) | 2018.11.23 |
---|---|
5. Python - Anaconda 설치 (0) | 2018.11.23 |
4. Python - 산술연산, 비교연산, 비트연산 등 (0) | 2018.11.23 |
3. Python - 불리안 연산, 숫자 자료형 (0) | 2018.11.23 |
2. Python - print() (0) | 2018.11.23 |