# 입력 받은 숫자를 문자가 아닌 숫자로 처리하고 싶을 때
- 데이터 변환 함수 (클래스의 생성자) 사용
- 문자열을 정수로 변환 : int()
# type() : 함수로 보이지만 실제로는 클래스
- type을 이용하면 객체의 클래스를 알 수 있음
# 변수란?
- 값(데이터)을 담는 그릇
- 종류와 크기
- 데이터의 종류와 크기에 따라 데이터 타입이 결정
- 이 데이터를 담는 변수의 데이터 타입도 결정
# 정적(static) vs 동적(dynamic)
# 정적 타입 언어 vs 동적 타입 언어
# pre-run-time(compilation-time) vs run-time
# 동적 타입 언어 : 변수가 프로그램 실행 중에 어떤 타입이든 저장 가능 즉, 변수가 특정 데이터 타입으로 결정X
# 정적 타입 언어 : 변수에 데이터 타입을 미리 선언 즉, 해당 변수는 사전에 선언된 데이터 타입만 저장 가능
# 파이썬은 강타입 언어이면서 동적 타입 언어
- 올바른 데이터를 사용하지 않으면 TypeError, ValueError
- 변수는 선언 없이 바로 생성, 대신 초기화 필요
- 선언은 어떤 데이터 타입을 사용할지 준비하는 것
# 파이썬에서 생성한 변수와 객체의 목록을 보고 싶다면 dir()함수 사용: print(dir())
# id() : 객체의 ID(주소) 반환
# Scalar 형
- 단일값 : 숫자형(int, float, complex), 불형(bool형), None 등
# Collection 형
- 다중값 : 원소(element)들로 구성됨
- 시퀀스 : 데이터가 순서대로 저장 (순서는 0번부터 시작)
- mutable (가변 시퀀스) : 변경 가능 - 리스트
- immutable (불변 시퀀스) : 값 변경 불가 - 문자열, 튜플
- 매핑
- 사전(dictionary, item) : 원소가 키와 값의 쌍으로 구성됨
키는 해시가능한 데이터 타입이어야 함(보통 immutable)
순서X
- 집합(set)
- 순서X
- 중복X
# boolean type
- 파이썬에서는 True, False (첫 글자 대문자에 주의)
# dll(dynamic linking library)
- 윈도우에서만 사용하며, 실행 중에 필요할 때 연결
# 리스트
- cf.) 베열(array) : 모든 원소가 같은 타입 (배열도 Collection 형의 sequence 타입)
- 리스트 리터럴 : 대괄호[] 사용
- 리스트 함수(클래스) : list()
# 인덱싱(Indexing) : 색인
- Collection 형에서 원소(아이템)에 접근하는 것
- 대괄호[] 사용
- 시권스 형은 반드시 0부터 시작, 정수형
- 사전(dictionary)은 키로 접근
# 슬라이싱(Slicing)
- 시퀀스 형의 원소 토막을 반환
- 슬라이싱의 결과는 해당 시퀀스 형과 같음 (문자열을 슬라이싱하면 문자열, 튜플을 슬라이싱 하면 튜플 등)
- 종료위치의 값은 포함하지 않음
- 종료위치의 값을 포함하지 않는 것은 시퀀스를 분리할 때 편리함을 제공
# 표현식(expression, expr)
- 평가(evaluation)한 결과가 값이 되는 것
# 튜플(Tuple)
- 튜플 리터럴 : 소괄호() 사용
- 튜플 함수(클래스) : tuple()
- cf.) 리스트와 다른 점 하나 : 원소 변경 불가능 즉, immutable 시퀀스
# 사전(dictionary, dict)
- 사전 리터럴 : 중괄호 {} 사용
- 아이템 키, 값 쌍은 콜론으로 구분
- 순서 없는 자료형
- 키 값은 같으면 안 됨
- 만약 같은 키를 가진 아이템이 있으면 마지막 key에 대응되는 value가 출력됨
- 사전의 키는 hashable 객체여야 함(쉽게 말하면 immutable의 느낌)
# Collection의 원소 제거
- del 명령어 : 객체 제거
- 해당 컬렉션의 메소드 사용
# GC(Garbage Collector)
- 메모리 관리 기법
# 레퍼런스 카운트
- 메모리 관리 기법
- 객체들은 레퍼런스 카운트를 통해 몇 번 참조당하는지 세고 있는데, 0이 되면 메모리 반환
# 집합(set)
- 중복을 허용하지 않음
- 순서가 없음
- 인덱싱이 불가능함
# 연산자 우선순위
- 산술 > (비트) > 비교 > 논리 > 대입
# 데이터를 논리값으로 판단해야 한다면
- 값 자체가 False : None, False
- 숫자 데이터는 0으로 판명되는 것 : 0, 0.0, 0j, Decimal(0), Fraction(0, 1)
- 빈 시퀀스 또는 컬렉션 : ' ', (), {}, [], set(), range(0)
# 논리 리터럴 True, False가 산술연산에 사용되면
- True는 1
- False는 0
# 동등 비교(==)
- 값이 같으냐 비교
# 일치(is)
- 객체가 같으냐
# 맴버십 연산자 : in, not in
- 컬렉션과 함께
# 흐름제어(Flow Control)
- 조건문 : if, else, elif
- 반복문 : for, while
# 조건문
- 조건 : 비교식, 논리값, Truth Value Testing으로 결정
- if는 필수
- else는 옵션
- elif(else if) 옵션, 필요한 만큼 여러번
- for문 : 반복 횟수가 정해져 있음, for문에 사용한 변수는 for문이 끝나더라도 사라지지 않음
- while문 : 조건이 거짓이 될 때까지 반복
# 코드 블록(code block)
- 프로그램 문장을 묶은 것
- 파이썬은 띄어쓰기로 코드 블록을 표현
- 파이썬은 코드블록 직전에 콜론(:)을 사용
- cf.) 다른 언어들은 보통 {}로 코드를 묶음
# short cut evaluation
- and 혹은 or로만 연결된 논리식에서 앞부분에서 이미 전체 결과가 결정되면 뒷부분은 evaluate하지 않음
# 참고
- ~ : tilde
- ` : backtick
- @ : at
- ^ : caret
- * : asterisk
- [] : square brakets(brace)
- {} : curly brakets(brace)
- () : parentheses
- | : pipe, vertical bar
- \ : back-slash
# 리스트(list), 튜플(tuple), 사전(dictionary), 집합(set) #
* 변수가 바인딩하고 있는 input객체에 대한 정보 출력
* 변수명에 ? 붙이는 것을 Introspection이라고 함
* int는 함수가 아니라 클래스
* 클래스의 type 불러내면 생성자인 type클래스가 출력됨
* int num; 은 단순히 변수를 선언한 것
* 선언된 변수 num을 10이라는 값으로 초기화
* 파이썬에서는 int num;과 같이 변수를 선언하는 과정이 없고, 바로 초기화부터 함
* 정적 타입 언어는 선언하고 초기화 (C++ 등)
* 동적 타입 언어는 바로 초기화 (파이썬 등)
* 파이썬은 동적 타입 언어이기 때문에, fn변수가 다양한 객체를 바인딩 가능
* 대입 연산자(assignment operator)는 오른쪽에서 왼쪽으로 바인딩
* c가 100을 바인딩 -> b가 100을 바인딩한 c를 바인딩 -> a가 c를 바인딩한 b를 바인딩
* True와 False의 타입은 bool
* 리스트 리터럴 -> 리스트 객체 생성 -> 변수에 바인딩
# a_list[0]과 같은 인덱싱 사용하여 해당 인덱스의 값 출력
* 리터럴에 직접 인덱싱도 가능은 함
* 보통은 변수에 바인딩한 후 인덱싱함
* 음수로 인덱싱하면 오른쪽부터 -1, -2, -3....
* 여러 타입을 원소로 가진 리스트
* f-string과 인덱싱을 통해 해당 인덱스의 타입을 출력
* 슬라이싱할 때 종료위치의 인덱스 값은 포함하지 않음
* 리스트에 대한 슬라이싱이니까 결과도 리스트로 출력됨
* 직관적으로 4-2 = 2 니까 2개의 원소가 출력될 것을 알 수 있음
* 비어있는 리스트 만드는 두 가지 방법 []로 빈 리스트로 초기화 하거나, list() 로 초기화
* append 메소드를 사용하여 1과 빈리스트와 문자열 a를 삽입
* my_list를 출력
* my_list 내의 인덱스1에서 인덱스2의 원소를 출력
* b리스트의 인덱스1의 값을 3.12321로 변경
* ()를 써도 되고 안 써도 됨
* ()를 쓰지 않을 때도 반드시 ,(콤마)는 사용해야 함
* ()를 사용하지 않고 튜플을 만들어도 자동으로 ()를 씌워줌
* 리스트를 튜플로 만들 수도 있음
* 튜플은 아이템 할당을 지원하지 않음
* 튜플 자체의 원소를 변경할 수는 없음
* 튜플 내부에 리스트가 있다면 해당 리스트의 원소는 변경 가능
* 튜플 내부에 있는 리스트는 튜플의 원소이기 때문에 리스트 자체를 다른 값으로 변경은 불가능
* (10)과 10은 같음
* 원소가 하나인 튜플은 반드시 (10,) 처럼 ,를 찍어야 함
* t2는 ,를 안 찍은 int 타입이고, t3는 ,를 찍어서 튜플타입
* a_dict에 있는 홍판서라는 value를 꺼내기 위해 키값인 ('홍길동', '아버지')로 인덱싱함
* '날짜'라는 키와 20220510이라는 값을 사전의 마지막 원소로 삽입
* 리스트는 튜플과 같은 방식의 원소 삽입 불가능
* 리스트에서는 append 메소드를 사용하여 리스트의 마직 원소로 원한는 값을 삽입할 수 있음
* insert 메소드를 통해 insert(몇 번째 자리에, 어떤 값을 넣을지) 정할 수 있음
* 리스트의 마지막 인덱스에 값을 넣을 때는 append를 쓰는 것이 빠름
* insert 메소드는 리스트 중간에 값을 넣을 때 사용함
* 비어 있는 사전을 만드는 두 가지 방법
* hellow world를 바인딩한 msg변수 값이 del msg명령어 이후 더 이상 출력되지 않음
* pop메소드를 통해 리스트의 마지막 원소를 제거
* del을 통해 a_dict에서 키 값이 100인 키 벨류 쌍을 제거
* 키가 c인 키벨류 쌍 제거
* c라는 키가 없으면 '없음' 출력
* 중복을 제거함
* 집합(set)의 타입은 set
* 중복을 제거함
* 정해진 순서 없이 임의의 순서로 출력됨
* 리스트와 튜플은 중복을 제거하지 않음
* 리스트와 튜플은 순서대로 출력됨
# 사칙연산, 논리연산, 비교연산 #
* 파이썬 3.대부터는 정수/정수 하면 실수가 출력됨
* //는 몫을 출력하는 연산자
* %(modulus)는 나머지를 출력하는 연산자
* 숫자로 사용될 때 True는 1 False는 0
* 100 or라면 뒤에 볼 필요도 없이 100이 True니까 값도 True인 100이 출력됨
* 'hello' or error 에서 뒤에 error라는 단어까지 읽었다면, 문자열도 아니고 정수형도 아니라서 애러가 나는 게 맞음
* hello만 보고 True로 판단해버리니까 애러 없이 hello가 출력됨
* 비교연산의 결과는 논리값(True or False)으로 출력됨
* in을 통해 리스트 안에 'kiwi'가 있는지 확인, 있으니까 True
* not in을 통해 리스트 안에 9가 있는지 확인, 없으니까 True
* .values()는 클래스임
* 'one'이 a_dict에 있으니까 True
* a는 17 b는 4이므로 a와 b의 비교연산 결과 True 출력됨
* 순서대로 비교한다 맨 앞자리 a끼리 비교해보면 같은 값
* a가 같은 값이니까 A와 B의 값을 비교
* l1, l2, l3 값은 같음
* l1과 l2는 저장되어 있는 주소값이 같아서 같은 객체, l3는 주소값이 다름
* 정수가 256이하일 때에는 1byte이하로 같은 숫자를 바인딩한다면 같은 주소를 가짐
* 정수가 257 이상이면 1byte가 넘어가면서 같은 숫자를 바인딩해도 별도의 객체로 생성됨
* a와 b를 swap하고 싶지만 서로 값이 같아짐
* a객체를 temp변수에 바인딩
* b객체를 a변수에 바인딩
* a가 바인딩 되어 있는 temp 객체를 b에 바인딩
# 조건문, 반복문 #
* 들여쓰기 간격이 다르면 다른 수준
* 들여쓰기로 흐름제어
* if와 else를 사용하여 a == b인 경우와 a != b인 경우를 표현
* elif를 활용해 else와 if를 한 줄의 코드로 작성
* test가 False이므로 Hello가 출력됨
*1부터 9까지의 수를 출력함
* 마지막 수인 10 바로 이전의 수인 9까지만 출력됨
* 0부터 999까지 출력
* 1_000_000 같은 식으로 세 자리 마다 _입력
* 10에서 시작하여 1의 바로 전인 2까지 -1씩 내려감
* enumerate를 사용하면 인덱스와 벨류를 동시에 받아올 수 있음
'KOSA 클라우드 솔루션즈 아키텍트 양성과정' 카테고리의 다른 글
[5.12] Python 4일차 (0) | 2022.05.12 |
---|---|
[5.11] Python 3일차 (0) | 2022.05.11 |
[5.9] Python 1일차 (0) | 2022.05.09 |
[5.6] 오픈스택-인스턴스 생성 (0) | 2022.05.06 |
[5.4] 오픈스택(Openstack) 개념 (0) | 2022.05.04 |