본문 바로가기
코딩, 개발 꾸준히 하면 볕날선생만큼 한다.

파이썬 문법

by 볕날선생 2021. 11. 16.
728x90
반응형

그냥 기억나는거 메모장에 막 적는다.

 

가변타입 리스트 list
불변타입 리스트 Tuple 튜플
불변타입이라 객체 수정은 불가능 

내가 이해한 
인플레이스 연산    : 속성을 바꾸거나 매칭하는거
아웃플레이스 연산 : 겉에 이름 껍데기만 매칭하거나 바꾸는거 

(몰라도 상관없다.) 
동적배열 : 파이썬도 시리얼처럼 길이가 있는 곳에 (길이는 무한하지 않다.) C에서 못한건 파이썬은 못한다. 적당한 길이를 만들어두고 값을 그 안에 넣는다. 

append 해서 값을 계속 추가한다고 하면, 배열이 가득 찼을때, 파이썬은 사용자 모르게 배열을 두배로 늘린다. 컴퓨터 메모리 어딘가에다가, 그리고 기존에 있던 값을 하나하나씩 다 복사한다. 그리고 그걸 불러온다. 이게 동적배열이다. 
O(N) 이 걸린다. 


정적배열 :
O(1) 상수시간


딕셔너리

키를 노출하면 밸류가 나옴
불변 타입으로 이루어져 있으면 키로 사용가능.
가변타입 리스트는 키로 사용 불가능.

set 셋을 키값으로 집합을 넣어서 이용하고 싶을때, 가변타입이라 이용 못하지만,
frozenset
a = frozenset([1,2,3,])
불변타입 프로즌 셋이 만들어짐. 프로즌 셋은 add가 안됨. 불변타입이라.

dictionary 

3항연산자는 밸류1 컨디션 밸류2 
파이썬에서 유일하게 존재하는 삼항 연산자
if else 문

밸류 이프 컨디션1 엘스 벨류2

베리어블 스코프 Variable Scope
파이썬에서 상위에 정의된 변수는 언제나 참조 가능

글로벌 변수 바깥에 정의된 변수 글로벌

함수 안에 정의된 변수 로컬
펑션 안에 있는 건 로컬이기 떄문에 다른 함수에서 참조나 불러올 수 없다.

Global 최상위에 선언
다른 파일에서 접근 가능

Local 함수 안에 선언
상위 함수에서는 접근 불가

변수값 바꾸지 마라, 스파게티 코드의 주 원인

클로저는 함수의 순수성을 보장하려는 함수

데코레이터 꾸밈자 
@ 사용해서 함수를 인자로 받아서 반환하는 함수
내가 이해한거 숏코드 넣어서 쉽게 함수를 표현하고 쓰는 것

데코레이터 문법 코딩할 일은 많이 없지만 알아두면 참으로 좋다.
데코레이터 꾸밈자 연습을 하자

재귀함수
자기 자신을 호출해서 반복적으로 수행
수학의 점화식과 동일
재귀함수와 반복문은 수학적으로 동치 서로 변환이 가능함.

관습적으로 가변인자는 args 를 쓴다 *args
명시적으로 지정된 파라미터가 남으면 키워드 가변인자 kwargs 키워드 알그스 를 쓴다
알그스 **kwargs


정리 및 지난시간 복습

파이썬은 1989년 크리스마스에 연구실이 닫혀 있어 심심해서 프로그래밍 언어를 만든 귀도 반 로썸이 시작이다. 몬티파이썬 시리즈를 좋아했던 그는 파이썬을 거기서 이름을 따왔다.

 

파이썬은 코드와 인터프리터만 있다면 어디서든 실행이 가능한 플랫폼 독립적인 인터프리터 언어다

코딩을 하다보면 어려운 용어가 많이 있는데 인터프리터가 뭔지 알아보니, 과거에 천공 카드로 읽던 사람의 프로그래밍 언어를 컴퓨터로 이해시키던 행위를 현대 근래에 들어서는 코드를 하나하나씩 해석해서 실행시키는 방법이라고 한다.

 

여튼 그리고 완전 객체 지향언어라고 해서 모든것은 객체다 파이썬의 특징

 

동적 타이핑 언어로써 코드를 실행하던 중에 타이핑도 가능하고, 덕 타이핑이라고 해서 만약 어떤 새가 오리처럼 걷고 꽥꽥거리면 그 새를 오리라고 부를 것이다. 프로그램으로 비유하면 오리처럼 뒤뚱거리고, 꽥꽥 소리를 내는 메서드를 갖는 객체는 오리라고 본다.

 

더 쉽게 설명하면, 매년 이맘때 김장을 담그고, 김치를 잘 먹고, 삼겹살을 좋아하고, 노래 부르기를 좋아하며, 착한 사람들은 한국인이다. 그냥 이렇게 생각 하련다. 

 

파이썬은 문법이 쉽고 다양한 기능으로 인해 높은 생산성이 있다고 한다.

더군다나 다양한 라이브러리로 쉬운 라이브러리 설치 및 관리가 장점이며 수많은 사람들이 다양한 라이브러리를 공개하고 있다. 

그리고 많이 쓰이고, 쉽고 문법도 많고, 설치 및 관리가 쉽고 수많은 라이브러리 구글링 (나의 경우는 스택 오버 플로우) 하면 거의다 해결책이 있다. 

 

파이썬 코딩을 위한 준비물 4가지

 

운영체제 : 윈도우, 리눅스, 맥 -> 리눅스를 추천. 요샌 가상화 서비스도 많아서 코랩을 이용 할 수도 있다. (다만 코랩은 12시간만 유지)

 

파이썬 인터프리터 : 그냥 앞으로는 해석기라고 생각하자. 파이썬 인터프리터 사람과 컴퓨터간의 해석기. 파이썬 홈페이지 가면 있다. 3.9버젼

 

코드편집기 : 코드편집기는 다양한데, 노트 쁠쁠이 좋지.

 

패키지 관리자 : 나는 패키지 관리자 하면 PIP 라는 단어밖에 생각이 안나는데, 음 기본적인 라이브러리 이외에 추가적으로 기능을 사용하려면 패키지 관리자를 통해서 설치하면 된다.

 

메모장으로도 코딩 가능하다는 걸 아주오래전에 들었는데, 간만에 다시한번 들었다.

다만 자동완성 기능도 없고 색깔 표시도 없어서 불편하지

옳고 그름 정-오 확인도 안되니까

 

코드 편집기 종류중에는 많이쓰는 에디터는 VIM과 Atom 이 있고, IDE 는 비주얼 스튜디오 코드, 파이참이 있다.

웹 베이스 IDE 는 주피터 노트북, 주피터 랩이 있다. IDE 뜻은 통합개발환경 소프트웨어 어플리케이션 인터페이스 이다.

 

클라우드 베이스 IDE 대표주자는 colab 구글 코랩 , 국산 구름 ide 가 있다. 

 

위에 패키지 관리자 설명했던 것 중에 PIP 그리고 아나콘다 3 도 있는데, 아나콘다3는 기계학습 및 수치해석 특화 패키지 관리 프로그램이다. 

 

추천하는 환경은 윈도우 + WSL + 비주얼 스튜디오 코드 + 아나콘다

사람들이 많이 쓰는 환경은 윈도우 + 비주얼 스튜디오 코드 또는 파이참 -> SSH 서버 연결을 통해서 -> 리눅스 + 아나콘다 환경으로 많이 개발을 한다고 한다.

 

걍 코랩으로 테스트용으로는 해도 좋다. 실개발 찐개발 환경으로는 권장하지 않는다. 패키지 관리가 매우 불편하고, 매우 쉽고 간단하지만, 12시간 세션 만료되면 날아감~! 옛날에 구글 드라이브에 저장해서 했던 기억이 나는데, 얼마나 불편해 그래도.

 

주피터에 대해서 

파이썬 기본 실행 환경 + 인터렉티브한 환경을 즐길 수 있게 

IPython 인터랙티브 컴퓨팅 , 아이 파이썬 커널을 기반으로한 인터렉티브 파이썬 셀 프로그래밍, 확장자는 ipynb 아이파이썬노트북, 주피터라는 웹 기반 ide 를 이용, vs 코드 및 파이참, 코랩에서 사용 가능.

미디어, 코드, 수식 등을 하나의 문서 형태로 표현 가능. 마크다운 형식으로 문서처럼 작성해서 공유 가능.

 

구글 코랩 Colab 자체가 주피터 기반으로 맹글어 졌다고 함.

주피터 On VsCode(비주얼 스튜디오 코드) vs코드 파이썬 플러그인에 주피터 서버가 내장됨. 

 

주피터에는 셀단위로 코드든 문서든 작성이 되는데, 

코드셀은 코드를 실행시키고 결과를 확인하는 방식

마크다운 셀은 마크다운 / html 문법으로 문서화 되어 작성하는 방식이다. 

 

파이썬 문법 + 오늘 2021년 11월 16일 복습

그냥 내가 이해한 방식으로 적는다. 같이 이해하셔도 좋고, 이해 못하셔도 내가 공부하는 목적으로 쓴거라. 

 

변수 : 값을 저장하는 공간, 값을 저장하는 바구니 라고 이해했다. 

= 이라는 연산자로 대입 연산을 하는데 연산자는 더하기 나누기 곱하기 빼기가 있다.

 

파이썬 변수의 특징은 모든 변수는 메모리 주소를 향한다. 즉 모든것은 포인터다 이다.

변수명은 일종의 이름표, 바구니 이름이다. 선언한 변수(선언이라는 단어가 생소한데, 매칭된 변수 지정된 변수라고 나는 이해했다.)에 특정 공간이 생기는 개념이 아니다. 필요하면 공간을 만들고 변수명을 붙이는 격이다. 

 

알파벳, 숫자, 언더스코어 _ 로 선언 하며, 숫자로 변수명을 시작할 수는 없다.

변수명은 그 변수의 특징이 잘 살아있게 가독성 있게 써야 한다. (다른이와 협업하거나 디버깅 했을때 내가 알아봐야 하니까) 

변수명은 대소문자가 구분되며, 변수명으로 쓸 수 없는 예약어라는게 존재한다 for. if. else. True 등이 있다.

 

C언어와 달리 대입 연산이 딱히 반환값을 가지는 것은 아니다. 연속해서 대입이 가능하다 c처럼 뒤에서 부터 대입, 파이썬 3.9 이상은 = 연산으로 대입과 동시에 반환이 가능하다. 

 

원시자료 파리이머티브 데이타 타입 형

정수 int | 실수 float | 복소수 complex 

문자열 str | 논리 bool | None None 타입 이 있다.

 

정수는 딱 떨어지는 정수 일반적으로 우리가 쓰는 숫자

실수는 소수점 , 복수수는 실수 허수, 문자열은 영어, 한글, 대문자 소문자

논리 불타입은 참거짓 트루 펄스 True False, 논 타입은 일종의 null. None 이라는 값만 취한다.

 

연산자 종류

+ 덧셈, - 뺼셈, * 곱셈, **거듭제급, / 나누기, // 나누기의 몫, % 나누기의 나머지 이다.

 

비트 연산을 위해서는 비트 연산자를 활용하기도 한단다

~ 비트 부정 , | 비트 합 ( | 이걸 빠이쁘 표시라고 한다.) , % 비트곱 , ^ 배타적 비트합 , >> << 비트 시프트 

비트가 뭔지 해서 찾아보니 아! 010101010로 표현한 2진수 기억났다.

 

헷갈리면 이렇게 생각하면 편하다. 8 4 2 1 법이라고 해서

 

숫자를 8과 4와 2와 1의 합으로 보고.

예를 들어 9의 경우는 

 

8과 1의 합이니까 

 

8의 자리에 1 

1의 자리에 1

나머지 가운데 4와 2의 자리에는 0 0 을 넣는다고 생각하면 편하다.

그럼

8 4 2 1 자리

1 0 0 1 이진법 숫자.

로 해석할 수도 있고

 

모든 수를 2로 나눠서 홀수냐 짝수냐로 봐서 홀수일때는 1

짝수일때는 0으로 보고

 

예를들어 숫자 88이 있다고 치면 

88 / 2 -> 짝수 0

44 / 2 -> 짝수 0

22 / 2 -> 짝수 0

11 / 2 -> 홀수 1

5 / 2 -> 홀수 1

2 / 2 -> 짝수 0 

1

-> 1011000 이다.

 

너무 말이 길어졌다 여튼.

 

산술 연산자 비트 연산자는 대입 연사자와 함께 축약이 가능하다고 한다

 

a +=1 은 인 플레이스 연산 , a = a + 1 은 아웃 프레이스 연산 인데

아웃 플레이스 연산은 명시적으로 새로운 객체 생성을 하며

인 플레이스 연산은 기존 객체를 수정 시도해보고 수정이 안되면 새로운 객체를 생성한다고 한다.

 

a++ 연산은 파이썬에 존재하지 않는다.

 

객체 간 비교을 위한 비교 연산자를 보면

다른건 다 비슷하고 같음표시는

x == y x 와 y가 값이 같다. 

x is y x 와 y 가 주소가 같다

 

x != y x 가 y 가 값이 다르다 

x is not y x 가 y 가 주소가 다르다

 

x in X x가 X에 포함된다 1 in [1,2,3]

x not in X x가 X에 포함되지 않는다, 1 not in [2,4,5] 

 

bool 끼리의 연산을 위해서 논리 연산자를 활용하기도 하는데, 

비트 연산자와는 다르다. 파이썬에서 비교연산은 한번에 평가된다.

 

not 부정 , or 논리합, and 논리곱이다.

 

(...) [...] {...} 괄호, 리스트, 딕셔너리 생성

x[...] x(...) x.attr 인덱싱, 함수 호출, 속성 참조

** 거듭제곱

+x -x ~x 단항 연산자

* / // & 곱셉 나눗셈 등

+ - 덧셈 뺼셈

<< >> 비트 시프트

& 비트곱

^ 배타적 비트합 (교집합 뺀 각자 단독적으로 있는 비트의 합)

| 비트합

in not in is is not 

< <= > >= == != 포함 & 비교 연산자

not x 논리 부정

and 논리곱

or 논리합

[x] if [contion] else [y] 삼항 연산자

 

문자열 (str) 타입은 따옴표 또는 큰 따옴표로 정의

기능상 차이는 없으나 한 쪽을 쓰면 다른 쪽을 텍스트에 넣을 수 있음

예를 들면 "안녕 하세요" 이걸 '안녕 "하세요"' 이렇게 넣을 수도 있단 뜻.

 

원시 데이터 타입들은 불변 타입이다. 

파이썬의 모든 것은 객체이기 때문에 원시 데이터 타입들 역시 객체이지만, 불변 타입들은 저장된 값이 변하지 않는다.

모든 타입은 피지컬 메모리 주소를 향한다. C언어의 포인터와 같은 개념, 프라이머티브 데이터 타입 (원시 데이터 타입)과 튜플 을 제외한 다른 모든 파이썬 객체는 가변 타입 뮤쳐블 타입 이다.

 

파이썬에서 대입은 원칙적으로 메모리 주소 복사 (즉, 값을 복사하지 않고 같은 주소를 공유) 한다. 불변형의 경우 수정이 필요할 경우에 새로운 객체를 생성한다. 

 

int 는 불변타입 리스트 [ ] 괄호에 쌓인건 가변타입. 

예를들어 

a = 10 

b = a 

a += 1

a , b , a is b 는

(11 , 10 , False) 인데 (10은 int 이니까)

 

a = [1 , 2 , 3,]

b = a

a += [4]

([1, 2, 3, 4,] , [1, 2, 3, 4,], True) (리스트 형식이니까 가변타입이라 True가 된다)

 

애매하지만 파이썬에서 적당한 크기의 원시 데이터 데입은 기존 객체를 할당한다.

기존이 객체 기존 메모리를 할당.

 

동적타입 코드 실행 지점에서 데이터의 타입을 결정한다.

 

bool 타입 -> int 타입 -> float 타입 -> complex 타입

None 타입과, str 타입은 별개

int 간의 나누기 -> float (정수 나누기는 // ) 

 

[Type]([value])로 명시적 형 변환 가능

int(a) , float(text), str(value) 

적절한 text는 적절한 값으로 변형

실수 -> 정수: 소수점 내림

반올림의 경우 round내장함수 사용

빈문자열, 0, None 은 False로 변환

 

타입 체킹 type 함수로 변수의 타입이 뭔지 확인 가능하다.

 

type(a) 

isinstance 함수로 변수가 지정 타입인지 확인 가능하다

isinstance(a, float)

 

데이터 구조

 

배열 리스트 일련의 데이터를 하나로 묶음

파이썬 배열으리 특징은 대괄호로 선언 " [ value1, value2, ...] "

아무타입이나 넣기 가능하고 길이가 정해져 있지 않다.

seq = [12345, 101, "Text", None, True]

seq

[12345, 101, 'Text', None, True]

 

리스트 인덱싱

List Index & Slicing 

슬라이싱

 

리스트 인덱싱은 seq[index] 형태로 요소 하나에 접근하고 

맨 앞은 0부터 숫자를 세기 시작한다

음수도 가능하다 (음수는 뒤에서 부터 접근한다)

seq = [1,2,3,4,5,6,7,8,9,10] 

seq[0] 은 1 이다

seq[-3] 은 뒤에서부터 세니까 8이다.

 

리스트 슬라이싱은 

seq[start: end: step] 형태로 리스트를 짜른다.

end 번째는 포함시키지 않는다.

 

리스트 오퍼레이팅은 리스트 를 서로 합치기

리스트 내에서 값을 바꾸기 

곱하기로 여러개를 여러번 합치기

리스트 안에 요소가 있는지 확인 

요소 in 어디

True or False 로 활용할 수 있다.

 

리스트 길이 구하기는 len(seq) 로 확인할 수 있다.

seq.length가 아니다.

 

요소추가는 seq.append("추가할 요소") 

맨뒤에 리스트추가는 seq.extend([5,6])

원하는 곳에 삽입 seq.insert(3, 3.5) 3번쨰에 3.5 삽입

 

del seq[1] 1번째 요소 삭제 seq.delet가 아니다. 

seq.remove(삭제할값) 원하는 값을 삭제

요로코롬 써먹을 수 있고

 

예약어는 일종의 문법적인 요소고 괄호를 쓰지 않는다 재정의가 불가하다

del , if ... else ..., assert

 

내장함수는 기본정의 함수로 별개의 함수 사용 재정의 가능, 편의성 향상

len( ) , sum( ), range( )

 

메소드는 객체 내에 정의된 함수 .method( ) 으로 접근, Overriding, 해당 객체를 다룬다.

.append( ) , .insert( ) , .extend( ) 

 

불변 타입 리스트 종류 중에는 튜플 Tuple 이 있는데, 선언시 "[]" 가 아닌 "()"를 사용하고, 문맥에 따라 괄호 생략이 가능하다. 리스트의 연산, 인덱싱, 슬라이싱 등을 동일하게 사용한다.

일반적으로 튜플은 함수에서 2개 이상 요소를 반환할 때 사용하고 불변타입이지만 튜플 안의 요소는 가변타입일 수도 있다. 문자열 타입 (str)의 경우 일종이 문자 tuple로 생략 가능하며 인덱싱 및 슬라이싱이 가능하다.

 

패킹은 여러데이터를 묶기 언패킹은 묶은 데이터를 푸는건데, 아스터리스크로 남는 요소를 리스트로 남기기도 가능하다.

 

_ 는 관습적으로 사용하지 않는 변수에 사용한다.

 

* 로 남는 부분을 리스트로 묶을 수 있다.

 

딕셔너리는 일종의 매핑을 위한 데이터 구조로 키 -> 밸류 형태로 구현이 되고, 불변 타입으로만 이루어져 있으면 키로 사용도 가능하다. {키1 : 밸류1, 키2: 밸류2, 키3: 밸류3} 형태로 선언한다.

 

딕셔너리는 해시로 구현해서 인덱싱 속도고 O(1) 이다. 빅오 표기법에서 O(1) 은 입력 데이터에 영향을 받지 않고 언제나 일정한 시간이 걸리는 알고리즘이라고 보면 된다.

 

특정 조건이 만족될 경우 실행할 문항을 설정

 

명령1

명령2

 

if <조건>:

    if-명령 1

    if-명령 2

 

명령 3

명령 4

 

들여쓰기와 :으로 구문을 구분하고

들여쓰기의 Convention은 스페이스 4칸, 탭키를 눌러서 삽입한다.

 

if [조건] 조건을 검사해서 블록을 실행

elif [ 조건] 이전 조건과 맞지 않을 경우 조건을 다시 검사 및 실행 

else 이전 모든 조건이 맞지 않을 경우 실행 

비교 연산자랑 논리 연산자를 사용한다

 

삼항 연산자 45 부터는 이어서 공부하자.

 

 

 

 

 

 

선언 반환

728x90
반응형