a = 2
파이썬에서 a = 2 를 정의할 때,
a를 변수라고 하면 50점짜리 점수! (이건 프로그래밍 관점)
a는 name 또는 identify 라고 부르는게 정답!
그럼 = 기준 오른쪽은 expression(하나의 결과값으로 축약할 수 있는 것)이라고 부른다.
= 은 binding 이라고 부른다.
a=2라고 지정하면, 이때 2는 int 타입으로 저장된다. 즉, 사용자가 굳이 명확하게 지정하지 않아도
type을 결정한다. 내부적으로 메모리 공간을 할당.
naming
literal
:expression에 붙이는 특수 기호
integer
. 이 있으면 float
j가 있으면 complex (허수)
파이썬의 naming (PEP8 참고)
- 예약어로는 이름을 못 만든다. 밑의 식으로 확인 가능
- 숫자나 특수문자로 시작할 수 없다.
- 단, _로 시작하는 경우는 예외 (_를 붙이면 특수한 용법으로 사용할 수 있다.)
-상수 취급할 때 대문자로 써라. (파이썬에는 상수라는 개념이 없다)
* 상수 : 한 번 메모리에 할당하면 그 값을 바꿀 수 없는 것.
* 변수 : ... 바꿀 수 있는 것.
- 함수 : snake 방식 (땅바닥을 기어다니는 뱀의 모양과 비슷하다고 해서 붙은 이름.
모두 소문자(혹은 모두 대문자)로 쓰되, 띄어쓰기를 밑줄(_) 기호로 대체하는 것이다.)
ex) moon_beauty
- 클래스 : camel (python) (첫 글자를 대문자로 적되, 맨 앞에 오는 글자는 소문자로 표기)
ex) moonBeauty
MoonBeauty (pascal = caps word)
- 내가 정의한 클래스는 camel 스타일, 파이썬에서 제공하는 클래스들은 소문자로만!
expression
- lambda : 익명함수 또는 함수 식. lambda함수도 하나의 expression 취급.
- 파이썬은 4가지 숫자형을 갖는다. 1. integer, 2.float, 3complex, 4.
- 정수형도 4가지 (bit 관점) 1. binary(2진밥), 2.bin(10진법), 3.oct(8진법), 4.hex(16진법)
- float : 부동소수. 무한대(inf), 허수, 숫자가 아닌 애도 float으로 관리한다.
위 결과는 0.3으로 딱 떨어지는 결과가 나오지 않지만, 밑의 결과는 1로 딱 떨어진다.
>>> 0.2+0.1 == 0.3
False
>>> 0.9+0.1==1
True
실행시, 주의해야 할 점.
>>> 1e2==100
True
>>> type(1e2)
<class 'float'>
>>> type(100)
<class 'int'>
>>> 1e2 is 100
<stdin>:1: SyntaxWarning: "is" with a literal. Did you mean "=="?
False
반면, ==는 주의해서 사용해야 한다.
float 는 빨리 연산하기 위해서 근사적으로 연산한다.
Atomic vs Container
>>> 100_000_00
10000000
문자열 (3가지) - 문자열은 순서가 중요하다.
- str(string)
- bytes (immutable)
- bytearray (mutable)
(memoryview)
* list : mutable
* tuple : immutable
*set : mutable
*frozenset : immutable
*mutable (변하기 쉬운): 잘 사용하면 편리하지만, 잘 못 사용하면 문제점이 많음.
그래서 mutable이 없는 프로그래밍 언어가 많음.
sequence data type은 순서가 중요하다.
dir() 시행 시, 리스트에 __getitem__, __len__이 있는 경우가 해당됨.
numpy 는 c로 만들어짐.
를 통해 maxsize 확인 가능.
>>> sys.maxsize
9223372036854775807
>>> a == a+1
False # a 변수를 정의하기 전에 a = a+1이라고 하면 거짓.
>>> b = 1.7976931348623157e+308
>>> b+1
1.7976931348623157e+308 # b를 최대값으로 설정해 두었을 때, 1 정도를 더해도 그 값이 변하지 않는 것을 확인
>>> b == b+1
True # 그래서, b==b+1도 true로 나옴.
>>> 1.7976931348623157e+309
inf #최대값의 데이터 형태는 정수.
Boolean 자료 형태
기본적으로 불리언의 자료 형태는 정수 -> 거짓은 0, 참은 1
>>> type(True)
<class 'bool'>
>>> issubclass(bool, int)
True
>>> True.__class__.__bases__
(<class 'int'>,)</class 'int'>
>>> str(True)
'True'
>>> True + True
2
따라서 이런 결과가 도출됨.
문자열
Escape code
>>> c = r'\t\rasa' #r은 Escape Codes 혹은 Escape Sequence
>>> c
'\\t\\rasa'
>>> cc = '\t\rasa'
>>> cc
'\t\rasa'
INDEXING
문자열 indexing
>>> a = '문근영'
>>> a[0]
'문'
>>> a[:2]
'문근'
>>> dir(a)
['__abs__', '__add__', '__and__', '__bool__', '__ceil__', '__class__', '__delattr__', '__dir__', '__divmod__', '__doc__', '__eq__', '__float__', '__floor__', '__floordiv__', '__format__', '__ge__', '__getattribute__', '__getnewargs__', '__getstate__', '__gt__', '__hash__', '__index__', '__init__', '__init_subclass__', '__int__', '__invert__', '__le__', '__lshift__', '__lt__', '__mod__', '__mul__', '__ne__', '__neg__', '__new__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__round__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__truediv__', '__trunc__', '__xor__', 'as_integer_ratio', 'bit_count', 'bit_length', 'conjugate', 'denominator', 'from_bytes', 'imag', 'numerator', 'real', 'to_bytes']
이 존재.
set indexing -> 안 됨
>>> d[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'set' object is not subscriptable
set은 hetero이기는 하지만, 제약 조건이 있다.
- 순서와 중복이 없다
- 우리가 임의로 순서를 정할 수 없다.
>>> {1,24,1,1,3,2,3,4,23,2,2}
{1, 2, 3, 4, 23, 24} # 중복을 제거하고 오름차순으로 정렬됨.
list indexing
>>> c[0]
1
재할당
>>> a
1
>>> d
[100, 2, 3]
OPERATOR
operatoroverloading 데이터 타입에 따라서 연산의 기능 정의
>>> (1,2,3)+(4,5,6)
(1, 2, 3, 4, 5, 6)
>>> 3*'abc'
'abcabcabc'
>>> 3*[1,2,3]
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> (1,2,3)+(4,5,)
(1, 2, 3, 4, 5)
>>>
연산자
### 연산자에도 우선순위가 존재 한다 ###
비교 연산자
존재론적 관점에서 조건문 체크 -> 없으면 거짓, 있으면 참.
조건연산자
in
>>> a in [1,2,'3']
True
>>> 'a' in [1,2,3]
False
>>> '1' in 'abc'
False
>>> 1 in {'a':1, 'b':2}
False
>>> for i in {'a':1, 'b':2}:
... print(i)
...
a
b
>>> for i in 1,2,3,4,5:
... print(i)
...
1
2
3
4
5
>>> 2 in 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: argument of type 'int' is not iterable
즉, in 다음에는 iterable한 것이 와야 함.
argument 와 parameter의 차이?
'Phython' 카테고리의 다른 글
함수 / * ,** / 함수 설명 보기 / 예외처리 (else, as, from, with) (0) | 2023.09.05 |
---|---|
DBMS / ORM 시작 (2) | 2023.09.05 |