아예 쌩늅늅이들을 위해 정리를 해보려고해용 :)
Python
- 파이썬은 프로그래밍언어 작성 후, 컴파일이 아닌 인터프리터를 통해 실행된다.
- 1991년 Guido van Rossum에 의해 개발되었다. (사실은 java 보다 4년 일찍 출시되었다.)
- 객체 지향 언어이며 동적 타이핑 언어
인터프리터랑 컴파일러랑의 비교를 해볼까요? 인터프리터와 컴파일러는 사람이 쓰는 개발언어를 기계어로 번역해주는 것입니다. 컴파일러는 단어의 뜻과 비슷하게 프로그램 전체를 스캔하여 이를 모두 기계어로 한번에 번역합니다. 인터프리터는 프로그램 실행시 한 번에 한문장씩만 기계어로 번역합니다.
인터프리터와 컴파일러 둘다 여어와 같은 인간의 언어로 작성한 코드를 컴퓨터가 이해할 수 있도록 변환시킨다는 점에서는 같습니다. 하지만 인터프리터는 소스 코드를 한줄씩 해석하지만, 컴파일러는 전체 프로그램 코드를 스캔하면서 인터프리터는 소스 코드를 해석하는데는 적은 시간이 걸리지만 실행 시간은 오래 걸리고, 컴파일러는 소스코드를 해석하는데는 많은 시간이 걸리지만 실행 시간은 빠릅니다.
객체 지향 언어는 무슨 뜻일까요?
객체 지향언어는 프로그램을 그저 데이터와 처리방법으로 나누는게 아니고, 프로그램을 다수의 "객체"를 만들고, 이들이 서로 상호작용을 통해 만들어지는 방식입니다. 명령어들로 이루어진 목록이 아닌 하나하나의 독립된"객체"들의 그룹으로 생각하면 되고,객체간의 메세지를 주고 받음으로서 쉽게 연결이 가능합니다. 객체지향언어의 특징은 크게 캡슐화,상속,다향성,추상화입니다.
- 캡슐화(Encapsulation):데이터와 코드의 형태를 외부로부터 알수 없게함
- 상속(Inheritance):상위 클래스의 모든걸 하위 클래스가 모두 이어받는 것
- 다향성(Polymorphism):한 객체가 다른 여러형태로 재구성 되는 것
- 추상화(Abstraction): 실제로 존재하는 객체들을 프로그램으로 만들기 위한 공통적인 특성을 파악해서 필요없는 특성을 제거하는 과정
이분 블로그를 참고해서 보면 좋을꺼같아요! 사실 객체 지향이라는 단어가 나오기엔 이르지만 이를 이해하고 파이썬 공부를 하면 좋다는점!!
1. 파이썬 프로그래밍의 구성요소
- literal : 사용자가 직접 입력하는 데이터
- variable : 데이터에 붙이는 이름
- function : 독립된 메모리 공간을 할당받아서 한 번에 수행되는 코드 블럭
- class & instance : 동일한 목적을 달성하기 위해 모인 데이터와 기능의 집합
- module : 파이썬에서는 파일을 모듈이라고 한다.
- package : module의 집합으로 배포 단위
- comment : 번역하지 않는 문장 #으로 시작 (#주석 예시 입니다)
2. 파이썬의 기본 자료형 ★
- int, float, complex :하나의 데이터(scala data), 불변(immutable), 직접 접근(일대일 대응이므로)
- str : 0개 이상의 문자의 집합, 불변, 순차 접근
- tuple : 0개 이상의 데이터의 모임, 불변, 순차 접근
- list : 0개 이상의 데이터의 모임, 가변, 순차 접근
- set : 0개 이상의 데이터의 모임, 가변, 순차 접근을 못함(순서대로 저장되어 있지 않음) -> 빨리 찾으려할 때 좋음, 중복확인에 굉장히 좋음
- dict(딕셔너리, 사전, map, hashtable 등) : 0개 이상의 데이터의 모임으로 가변, key-value 시스템, key가 set으로 만들어 짐 -> 속도가 빠르지만, 메모리 소모가 크다.
다 중요한 개념이지만 tuple,list,set,dict의 경우 코테 준비나 데이터분석 쪽을 준비하고 계신다면 안보고도 나올수 있게 이해 잘하는게 중요합니다!
아래 코드는 dictionary에 있는 list와 dictionary를 뽑는 코드입니다. 제가 하면서 헷갈렸던 부분이 dict안에 있는 dict을 어떻게 하지라 고민했는데 아래코드로 결국해냈습니다:)
character={
"name":"기사",
"level": 12,
"items":{
"sword":"불꽃의 검",
"armor":"풀플레이트"
},
"skill":["베기","세게베기","아주세게베기"]
}
for key,value in character.items():
if type(value) is dict:
for i in character[key]:
print("{}:{}".format(i,character[key][i]))
elif type(value) is list:
for i in character[key]:
print("{}:{}".format(key,i))
else:
print("{}:{}".format(key,value))
3. Literal
- 숫자 :
정수(int) : 10진수(숫자), 8진수(0o숫자), 16진수(0x), 2진수(0b숫자), 숫자L
실수(float) : 1.2, 0.12e(0.12*10의 1승)
복소수(complex) : 4+5j
- bool : True와 False
- str : 작은 따옴표나 큰 따옴표 안에 기재하면 되는데 여러 줄은 따옴표 3번
- bytes : 바이트의 집합으로 b'문자열'또는 b'코드\코드...\
- list : []안에 나열
- tuple : ()안에 나열
- set : {}안에나열
- dict : {key : ~ ,value : ~}
- str, bytes, tuple, set. dict는 순차적으로 접근이 가능해서 iterable 이라고 한다.
- None : 가리키는 데이터가 없다라는 의미. 자료구조에선 nill(파이썬 외 언어), NaN(파이썬)도 유사한 의미로 사용
4. 사용자 정의 명칭 - identifier
- 데이터, 함수 나 메서드, 클래스, 인스턴스, 모듈, 패키지에 부여하는 이름.
- 영문자, 숫자, 한글, 등을 사용할 수 있음.
- 시작은 문자로
- 중간 공백은 불가
- 예약어는 사용자 정의 명칭으로 사용할 수 없다.
- 일반적으로 클래스 무남 이릅으러
- 클래스 이름만 대문자로 시작하고 변경할 생각이 없는 데이터의 이름은 모두 대문자로 만드는 것이 관례
5. Variable(변수)
변수란 데이터에 이름을 붙이는 것
- 이름 = 데이터(literal or 다른 변수 or 함수)
- 이름이 존재하지 않을 시에는 이름을 생성하고 이름이 존재하면 가리키는 곳을 변경합니다.
- 데이터를 가리킬 때 자료형이 결정된다. (Dynamic Binding) ex 자료형을 int라고 결정하면, 정수 외엔 입력 불가
변수 얘기를 하면서 하고 싶었던 말이 argument와 parameter의 차이 입니다.
argument는 실제로 함수가 호출될 떄, 넘기는 변수값을 의미하고, parameter은 함수를 정의할때 사용되는 변수를 의미합니다.말로 하기에는 어려우니까 예시로 볼께요
def plus(x,y):
return x+y
# x와 y는 parameter이다.
plus(10,20) #10과 20은 argument
다음과 같이 parameter은 함수 정의 부분에서 사용하는 변수이고, argument은 함수를 호출할때 넘기는 변수입니다. 다음 개념을 혼동하지말고 사용하셨으면 좋겠습니다!
6. Operator(연산자)
: 연산을 수행해주는 부호나 명령어
- 산술 연산 : 숫자 데이터를 연산해서 숫자로 결과를 리턴하는 연산
- 논리 연산 : bool 데이터를 연산해서 결과를 bool로 리턴하는 연산
- 단항 연산(unary) : 데이터의 개수가 1개인 연산
- 이항 연산(binary) : 데이터의 개수가 2개인 연산
6.1) 할당 연산자
: 오른쪽의 데이터의 참조를 왼쪽의 변수에 대입
6.2) 산술 연산자
- + : 숫자의 경우는 덧셈을 하고 데이터의 모음은 결합, 다른 종류의 데이터끼리는 덧셈 연산이 안됨
- - : 뺄셈
- * : 숫자 데이터인 경우는 곱셈, 데이터의 모임과 정수의 경우는 반복
- ** : 거듭제곱
- / : 나눗셈
- // : 몫
- % : 나머지
6.3) 비교 연산자
: 연산의 결과를 bool로 리턴
- >, >=, <, <=, ==, !=,
- bool 데이터도 크기 비교가 가능 -> True는 1로 간주, False는 0으로 간주 => True > False
- 문자열도 크기 비교 가능 but 첫 글자 부터 코드 값을 비교해서 판별(A는 65, a 는 97이므로 소문자가 더 큼)
6.4) 산술 비트 연산자
정수 데이터를 2진수로 변환해서 각 비트 단위로 연산을 수행한 후 10진 정수로 결과를 리턴하는 연산자
- & : and 로 둘 다 1 일 때 1, 나머지는 0 / Format -> 디스크 & 0
- | : or 로 둘 다 0인 경우만 0이고 나머지 경우는 1 / 0과 or 하면 그대로 나옴. -> 붙여넣기
=> 2개의 연산자를 데이터 분석을 위한 라이브러리(numpy)에서 데이터 모임에서도 사용이 가능한데 이 경우는 위치 별로 연산을 수행해서 리턴
- ^ : eXclusive OR로 두 개의 데이터가 같은 경우는 0 다른 경우는 1 / 중복 여부 ^ -> 0이면 중복, 아니면 중복 아님.
- ~ : 단항 연산으로 1의 보수
- << : 왼쪽으로 미는 연산자 - 곱하기 2
- >> : 오른쪽으로 미는 연산자 -나누기2
% '~' 연산 예시
-> ~20 을 구해보자 (16비트를 사용한다고 가정)
0000 0000 0001 0100 : 20
~ 을 해주면
1111 1111 1110 1011 -> 10진수로 바꿔주면 (2의 보수)
맨앞이 1이므로 부호는 -
0000 0000 0001 0101 (맨 오른쪽은 바꾸지 않는다)
답은 - 21
6.5) 논리 비트 연산자
: bool 데이터를 가지고 연산을 수행해서 결과를 bool로 리턴하는 연산
- and : 둘 다 True 인 경우만 True, 나머지 경우는 False
- or : 둘 다 False 인 경우만 False 이고 나머지 경우는 True
- not : True 이면 False, False 이면 True
- and 와 or 가 같이 있으면, and 가 우선.
- and 와 or 의 순서가 바뀌어도 연산의 결과는 같으나 과정은 다르다.
- and는 앞의 결과가 false인 경우 뒤의 연산의 결과를 확인 x
- or는 앞의 결과가 true 인 경우 뒤의 연산의 결과를 확인 x
if i % 3 == 0 and i % 4 == 0 : 이런 경우, i % 4가 앞인 경우가 더 좋다.
-> 임베디드에서 주 효과
6.6) 논리 함수
- all(데이터의 집합) : 데이터의 집합에 있는 모든 데이터가 True 이면 True
- any(데이터의 집합) : 데이터의 집합에 있는 데이터 중 하나만 True 이면 True
Falsy : 0 은 False 로 간주 <-> 0 이 아니면 True
6.7) 복합 할당 연산자
- 변수 연산자 = 데이터 : 변수가 가리키는 데이터와 오른쪽 데이터를 연산자에 해당하는 연산을 하고 그 데이터를 변수가 가리키도록 한다.
a = 10
a -= 3 #동일 a = a -3 혹은 +를 대입 가능
7. 데이터의 자료형 변환(Casting)
: 다른 자료형끼리 연산을 수행하거나 원하는 결과를 만들어내기 위해서 형 변환을 수행
- 프로그래밍에서는 일반적으로 숫자와 문자열 사이의 변환이나 문자열과 날짜 사이의 변환을 많이 수행
- 데이터 분석에서는 이외에도 factor 타입으로의 변환이나 문자열 데이터를 비트열로 변환하는 것을 많이 수행합니다
7.1) 형 변환의 종류
- 묵시적 형변환 : 자동으로 형 변환이 되는 경우 (정수 + 실수 => 실수)
다른 종류의 숫자 데이터끼리 연산을 하는 경우 작은 타입을 큰 타입으로 변환해서 수행
- 명시적 형변환 : 형 변환을 직접 수행하는 경우
- 정수로 변환 : int(숫자 혹은 숫자로된 문자열)
- 실수로 변환 : float(정수, 혹은 숫자 문자열)
- bool로 변환 : bool(숫자 데이터 또는 bool 문자열)
- 문자열로 변환 : str(데이터)
- 실수를 정수로 변환하면 소수가 소멸
다음 포스팅에서 찾아뵙겠습니다.
'Study > PYTHON,Django' 카테고리의 다른 글
Django(2)-데이터베이스 연동 (0) | 2024.01.25 |
---|---|
Django(1)-웹 프로그래밍 기초 (0) | 2024.01.24 |
Python(4)-OOP심화 (0) | 2024.01.19 |
PYTHON(3)-객체지향(OOP) (0) | 2024.01.09 |
Python(2)-모듈,패키지 (0) | 2024.01.05 |