2023-07-06
Python
- 파이썬은 프로그래밍언어 작성 후, 컴파일이 아닌 인터프리터를 통해 실행된다.
- 1991년 Guido van Rossum에 의해 개발되었다. (사실은 java 보다 4년 일찍 출시되었다.)
- 객체 지향 언어이며 동적 타이핑 언어
- 클라우드는 Go 언어를 배우는 것을 추천 -
- IDE: Anaconda , Pycharm 등
1. 파이썬 프로그래밍의 구성요소
- literal : 사용자가 직접 입력하는 데이터
- variable : 데이터에 붙이는 이름
- function : 독립된 메모리 공간을 할당받아서 한 번에 수행되는 코드 블럭
- class & instance : 동일한 목적을 달성하기 위해 모인 데이터와 기능의 집합
- module : 파이썬에서는 파일을 모듈이라고 한다.
- package : module의 집합으로 배포 단위
- comment : 번역하지 않는 문장 #으로 시작 (#주석 예시 입니다)
2. 코딩 시 주의 사항
- 라인 단위로 번역해서 실행하기 때문에 기본적으로 ; 은 필요가 없는 대신, 한 줄에 2개의 실행문(=가 존재하는 문장이나 함수 호출)이 있는 경우는 ; 으로 구분
- 파이썬은 하나의 블럭을 만들 때 들여쓰기를 이용 - 기본은 빈 칸 4개지만 일정하게 맞추기만 한면 됩니다.
- 콘솔에 출력할 때는 print 함수를 이용하는데, 여러 개 출력하고자 하면 ,로 구분하고 기본적으로 줄 바꿈을 수행한다.
- 하위 레벨을 만들 때는 : 다음에 들여쓰기를 하고 작성
#동일한 블럭에서는 들여쓰기를 맞추어야 하지만 다른 블럭의 경우는 맞출 필요 없음
num = 20
if num >= 10 :
print("10보다 크거나 같다")
print("에러가 납니다.") -> 에러 발생
else :
print("10보다 작다")
3. Comment
- # 다음에 작성하면 주석이 된다.
- 파이썬에는 문자열 상수를 만들 때 작은 따움표나 큰 따움표 안에 묶고 여러 줄의 경우는 작은 따움표나 큰 따움표 3번을 해서 만듭니다.
- 주석을 만들고자 할 때 주석에 큰 따움표나 작은 따움표 3번을 사용해서 만들기도 함.
#주석
"""
이 문장은 문자열 상수를 문장인데 대입도 하지 않았고 출력에 이용하지도 않았기 때문에
주석처럼 처리됩니다.
"""(내부에 추가적인 따움표 세개가 있어서는 안된다)
- #! 는 주석이 아니고 유닉스의 shebang 입니다.
파이썬에서는 소스 코드의 인코딩을 표시할 목적으로 사용
4.Document 관련 명령어
- dir(데이터) : 데이터가 호출 가능한 속성과 메서드를 리턴(print 필요)
- help(함수 나 메서드) : 함수 나 메서드의 도움말을 출력(print 불필요)
5. Python의 keyword(예약어)
- python이 기능을 정해둔 것으로 다른 용도로 사용하면 에러임(변수의 이름이나 함수의 이름으로 사용할 수 없음)
- 확인
import keyword
print(keyword.kwlist)
=> 에러
None = 20 #None은 예약어이므로 다른 데이터를 대입할 수 없습니다.
6. 모듈을 찾아오는 순서 확인
import sys
print(sys.path)
# 여러 path 중에 현재 디렉토리가 우선적으로 선택됨.
7. 파이썬의 기본 자료형
- 숫자 데이터 : int, float, complex - 하나의 데이터(scala data), 불변(immutable), 직접 접근(일대일 대응이므로)
- 문자열 : str : 0개 이상의 문자의 집합, 불변, 순차 접근
- tuple : 0개 이상의 데이터의 모임, 불변, 순차 접근
- list : 0개 이상의 데이터의 모임, 가변, 순차 접근
- set : 0개 이상의 데이터의 모임, 가변, 순차 접근을 못함(순서대로 저장되어 있지 않음) -> 빨리 찾으려할 때 좋음, 중복확인에 굉장히 좋음
- dict(딕셔너리, 사전, map, hashtable 등) : 0개 이상의 데이터의 모임으로 가변, key-value 시스템, key가 set으로 만들어 짐 -> 속도가 빠르지만, 메모리 소모가 크다.
8. Literal
- 사용자가 직접 입력하는 데이터인데 처음 사용될 때 static 영역에 생성되고 이후 부터는 재사용.
- 숫자 :
정수(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(파이썬)도 유사한 의미로 사용
9. 사용자 정의 명칭 - identifier
- 데이터, 함수 나 메서드, 클래스, 인스턴스, 모듈, 패키지에 부여하는 이름.
- 영문자, 숫자, 한글, 등을 사용할 수 있음.
- 시작은 문자로
- 중간 공백은 불가
- 예약어는 사용자 정의 명칭으로 사용할 수 없다.
- 일반적으로 클래스 무남 이릅으러
- 클래스 이름만 대문자로 시작하고 변경할 생각이 없는 데이터의 이름은 모두 대문자로 만드는 것이 관례
10. Variable(변수)
변수란 데이터에 이름을 붙이는 것
- 이름 = 데이터(literal or 다른 변수 or 함수)
- 이름이 존재하지 않을 시에는 이름을 생성하고 이름이 존재하면 가리키는 곳을 변경합니다.
- 데이터를 가리킬 때 자료형이 결정된다. (Dynamic Binding) ex 자료형을 int라고 결정하면, 정수 외엔 입력 불가
reference(참조)를 이용해서 다양한 자료 저장이 가능하다.
- 이름을 만들 때는 기억하기 쉬운 or 의미를 파악하기 좋은 이름을 사용하는 것이 좋습니다.
- 변수는 기본적으로 자신의 영역이 종료되면 파괴되지만 강제로 파괴하고자 하는 경우는 -> del 변수명 (a = None)
instance -> heap 저장/ class, function, literal -> static에 저장
- 하나의 데이터를 저장하는 경우에는 이름이 데이터를 의미하지만, 0개 이상의 데이터를 저장하는 경우에는 이름은 시작 위치를 의미합니다. (list 의 내용이 시작되는 주소를 가리킴)
- 영역이 다르면 동일한 이름으로 변수를 생성할 수 있다.
11. Operator(연산자)
: 연산을 수행해주는 부호나 명령어
- 산술 연산 : 숫자 데이터를 연산해서 숫자로 결과를 리턴하는 연산
- 논리 연산 : bool 데이터를 연산해서 결과를 bool로 리턴하는 연산
- 단항 연산(unary) : 데이터의 개수가 1개인 연산
- 이항 연산(binary) : 데이터의 개수가 2개인 연산
11.1) 할당 연산자
: 오른쪽의 데이터의 참조를 왼쪽의 변수에 대입
11.2) 산술 연산자
- + : 숫자의 경우는 덧셈을 하고 데이터의 모음은 결합, 다른 종류의 데이터끼리는 덧셈 연산이 안됨
- - : 뺄셈
- * : 숫자 데이터인 경우는 곱셈, 데이터의 모임과 정수의 경우는 반복
- ** : 거듭제곱
- / : 나눗셈
- // : 몫
- % : 나머지
11.3) 비교 연산자
: 연산의 결과를 bool로 리턴
- >, >=, <, <=, ==, !=,
- bool 데이터도 크기 비교가 가능 -> True는 1로 간주, False는 0으로 간주 => True > False
- 문자열도 크기 비교 가능 but 첫 글자 부터 코드 값을 비교해서 판별(A는 65, a 는 97이므로 소문자가 더 큼)
11.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
11.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가 앞인 경우가 더 좋다.
-> 임베디드에서 주 효과
11.6) 논리 함수
- all(데이터의 집합) : 데이터의 집합에 있는 모든 데이터가 True 이면 True
- any(데이터의 집합) : 데이터의 집합에 있는 데이터 중 하나만 True 이면 True
Falsy : 0 은 False 로 간주 <-> 0 이 아니면 True
11.7) 복합 할당 연산자
- 변수 연산자 = 데이터 : 변수가 가리키는 데이터와 오른쪽 데이터를 연산자에 해당하는 연산을 하고 그 데이터를 변수가 가리키도록 한다.
a = 10
a -= 3 #동일 a = a -3 혹은 +를 대입 가능
11.8) 데이터 타입 확인
- type(데이터)
11.9) 참조하고 있는 데이터 확인
- id(데이터)
=> id가 같으면 동일한 데이터를 가리키는 것임.
11.10) 연산자의 우선 순위
- . , [인덱스]
- **
- ~, 부호 (+, -)
- *, /, //, %, @
- >>, <<
- &, ^, |
- >, >=, <, <=
- ==, !=
- in, not in, is, is not
- not
- and
- or
- =
12. 데이터의 자료형 변환(Casting)
: 다른 자료형끼리 연산을 수행하거나 원하는 결과를 만들어내기 위해서 형 변환을 수행
- 프로그래밍에서는 일반적으로 숫자와 문자열 사이의 변환이나 문자열과 날짜 사이의 변환을 많이 수행
- 데이터 분석에서는 이외에도 factor 타입으로의 변환이나 문자열 데이터를 비트열로 변환하는 것을 많이 수행합니다
12.1) 형 변환의 종류
- 묵시적 형변환 : 자동으로 형 변환이 되는 경우 (정수 + 실수 => 실수)
다른 종류의 숫자 데이터끼리 연산을 하는 경우 작은 타입을 큰 타입으로 변환해서 수행
- 명시적 형변환 : 형 변환을 직접 수행하는 경우
- 정수로 변환 : int(숫자 혹은 숫자로된 문자열)
- 실수로 변환 : float(정수, 혹은 숫자 문자열)
- bool로 변환 : bool(숫자 데이터 또는 bool 문자열)
- 문자열로 변환 : str(데이터)
- 실수를 정수로 변환하면 소수가 소멸
13. Console 입출력
13.1) 콘솔 출력 : print()
print(value, ..., sep=' ', end = '\n', file=sys.stdout, flush=False)
- 첫번째 매개변수(value)는 출력할 데이터
- 두번째 매개변수(...)는 출력할 데이터인데 개수 제한이 없음
- sep는 데이터 사이의 출력되는 문자
- end는 출력하고 난 후 출력되는 문자
- file은 출력할 대상을 지정하는 것인데 sys.stdout(표준 출력 장치 => 모니터)
- flush는 버퍼의 내용을 비울 지에 대한 옵션 (True 이면 한번에 print 내용을 모아서 출력)
- 서식 설정 : % 다음에 숫자와 영문자 1개를 이용해서 데이터를 포맷에 맞춰서 출력
- %10d : 열자리를 확보해서 정수를 출력
- %s : 문자열
- %d, %i : 정수
- %f : 실수
- %b : bool 출력
num = 20
print("num은", num) #num은 20
print("num은 %d" %(num)) # num은 20
# 실수를 출력할 때 .소수자릿수f 를 이용하면 출력되는 소수의 자릿수를 설정가능
=> print("{0} 은 {1}을 좋아합니다.".format("아담", "신촌 라이브 카페"))
=> 아담 은 신촌 라이브 카페을 좋아합니다.
# 따옴표 앞에 f를 추가하면 인덱스 대신에 이름을 사용할 수 있다.
original = "원빈"
copy = "아담"
print(f"{copy} 은 {original}을 보고 만든 건데 초상권에 대한 비용을 지불하지 않았습니다.")
13.2) 콘솔 입력 : input()
- prompt는 메시지
- Enter를 누를 때 까지 입력을 받아서, 받은 내용을 하나의 문자열로 리턴한다.
변수이름 = input("메시지") => 정수나 실수 또는 bool 을 입력받으려 하면, 형 변환을 이용하고, 데이터 포멧이 맞지 않으면, 예외가 발생한다.
한 번에 여러 개를 입력받고자 할 때는 구분 기호를 이용해서 입력받고 split으로 분할하면 list로 만들 수 있습니다.
14. git 업로드
지금까지 열심히 파이썬 코딩을 진행했다고 가정 해볼께요
이 작업들을 로컬에 저장해도 좋지만 프로젝트를 진행하고 있다면, git 을 통해 공유하는 플랫폼에 저장하는게 훨씬 편하겠죠?
그래서 지금 부터는 git에 작업물을 올리는 방법과 다운로드 방법을 알려드리겠습니다.
14.1) 로컬 git에 현재 프로젝트를 등록
- git init
14.2) 로컬 git에서 관리할 파일을 등록(staging)
- git add 파일명
- git add .(현재 디록토리의 모든 파일을 등록)
=> .gitignore 파일을 만들어서 파일 명이나 디렉토리 이름을 작성하면 작성된 파일이나 디렉토리는 제외가 됩니다.
14.3) 변경 내역을 반영
- git commit -m "메시지"
14.4) 연결 해제
- 디렉토리 안의 .git 디렉토리 삭제(윈도우)
- mac / linux : rm -rf .git
14.5) 자기의 branch 확인
- git branch
14.6)branch 생성 및 선택
- git checkout -b 브랜치 이름
=> -b 를 삭제하면 브랜치 선택이 됨.
14.7) git hub 에 연동할 repository를 생성
- git remote add origin https://github.com/svng-zu/python.git
GitHub - svng-zu/python: 파이썬 실습 코딩 0706
파이썬 실습 코딩 0706. Contribute to svng-zu/python development by creating an account on GitHub.
github.com
14.8) 로컬 git 과 repository 연결
- git remote add repository 이름 url
- 확인 : git remote -v
- 해제 : git remote remove repository이름
14.9) 현재까지의 작업내용 업로드
- git push repository이름 브랜치이름
14.10) 변경 내역을 반영하고자 하는 경우
- 2,3,9 번 작업만 수행
14.11) 프로젝트 전체 다운로드
- git clone url 프로젝트이름
14.12) 변경된 내용을 반영
- git pull repository
14.13) 브랜치 삭제
- git branch -d 브랜치이름
ps. 리터럴이란 소스 코드의 고정된 값을 나타내는 표기법이다. 거의 모든 프로그래밍 언어는 정수, 부동소수점 숫자, 문자열, 불린 자료형과 같은 기본적인 값에 대한 표기법이 있다.
'LG 헬로비전 DX DATA SCHOOL > Python' 카테고리의 다른 글
Python 예외처리 / File handling (0) | 2023.07.14 |
---|---|
파이썬 Data Type 및 처리 (0) | 2023.07.11 |
객체 지향 프로그래밍 (OOP) (0) | 2023.07.11 |
Python - 제어문과 함수 2 (0) | 2023.07.10 |
Python - 제어문과 함수 (0) | 2023.07.07 |