[P-01] python

이서영·2023년 8월 8일
0

python

목록 보기
1/3

1.기본적인 사용

▶ 주석

  • 파이썬에서 사람만 알아볼수 있도록 작성하는 부분 (보통은 해당 부분의 코드를 설명할때 사용)

  • 기본적으로는 #을 사용

  • 전체 줄을 바꾸고 싶을 때에는 드래그 후 command + / (맥os ), ctrl + / (윈도우)

▶들여쓰기

  • 들여쓰기는 코드를 읽기 쉽도록 일정한 간격을 띄어서 작성하는 방법이다.

  • c나 java등에서는 들여쓰기를 하지 않아도 코드가 정상적으로 동작하지만 파이썬은 들여쓰기 자체가 문법이기에 들여쓰기를 하지 않으면 에러가 발생한다.

  • 방법으로는 파이썬에서 들여쓰기 방법은 공백(스페이스) 2칸, 4칸, 탭(tab) 등이 있다.

  • 유의할점은 공백 4칸과 탭은 시각적으로 보았을때 비슷하고 같이 사용해도 될 것 같지만 사용하다보면 에러가 발생하니 한가지만 작성하자

▶ 세미클론 ( ; )

  • 파이썬은 구문의 끝을 줄단위로 인식한다. 그래서 c와는 다르게 ;(세미클론)을 사용하지 않지만 사용해도 문법적 에러는 발생하지 않는다. 보통은 두 구문을 한 줄에 작성할 때 사용한다.


2. 식별자

함수, 변수, 클래스, 모듈 등의 이름을 붙여 식별할 때 사용한다.

▶협약에 의한 규칙

  • 첫 글자로 숫자 사용 불가

  • 예약어 사용 불가

  • 대소문자 구분

  • 공백 불가

  • 영문알파벳, 숫자, _ (언더바) 로 구성


3. 변수와 자료형

I ) 변수

  • 변수란 말 그대로 변할 수 있는 수이다. 어떠한 값을 저장하기 위한 수라고 생각하면 편하다.

  • 변수는 = 을 통하여 값을 할당한다.

    • x = 1 ;

    • 위에처럼 왼편에는 변수명, 오른쪽에는 값을 넣으면 된다.

  • 변수명을 작성할 때에는 원하는 명칭으로 작성하면 되지만 다음과 같은 규칙이 존재한다.

    • 영문 문자와 숫자를 사용 가능.
    • 대소문자를 구분
    • 문자부터 시작해야 하며 숫자부터 불가.
    • _(밑줄 문자)로 시작 가능.
    • 특수 문자(+, -, *, /, $, @, &, % 등)는 사용 불가.
    • 파이썬의 키워드(if, for, while, and, or 등)는 사용 불가.
    • 변수 값으로는 정수,실수, 문자형 등이 와도 상관없다.

II ) 자료형

방금 위에서 자료형이라고 하였는데 자료형은 컴퓨터가 어떠한 값인지 인식 할 수 있도록 형태를 전해주는 것이다.

예를 들어 영어 A(아스키코드로 65)를 입력하자고 하자. 그러면 컴퓨터는 이진수로 밖에 인식을 못하기 때문에 65를 이진수로 치환하여 인식한다. 그러면 영어 A와 숫자 65는 어떻게 구분할까? 바로 자료형으로 구분하게 할 수 있다.

하지만 파이썬은 자료형을 자동으로 정해준다. 하지만 우리가 강제로 정해야하는 경우도 있기 때문에 자료형을 알고 있어야한다.

▶정수형 (integer, int)

  • 모든 정수는 int로 표현한다. 보통은 1,2등의 뒤에 소수점이 없는 숫자라고 생각하면 편하다.

▶실수형 (float)

  • 뒤에 소수점이 있는 수라고 생각하면 편하지만, 조금 더 깊에 들어가면 부동소수점 이라고 한다. ->똑같은 1,2 이더라도 같은 1.2가 아 닌 1.2에 근사한 값으로 저장된다.

  • 실수의 경우 뺼셈 시에는 오류가 발생한다. -> round() 를 통하여 반올림을 해 정리가 가능하다

▶Bool

  • 참과 거짓으로 이루어진 논리자료형이다.

▶None

  • 값이 존재하지 않는 것을 의미하는 자료형이다.

▶String

  • 문자열은 ' , " 으로 둘러싸서 표현

  • 여려 줄로 되어있는 문자열은 """ , '''로 표현

  • 입력받은 것들은 보통 str형태이다

▶ 순차(squence) 자료형

  • 데이터가 순서대로 되어있는 형식(정렬되어있는것은 아님)
  • 종류 : list, tuple, range, string, binary
    i) 리스트 (list)
    list_name = [value1, value2...] 
  • 리스트에 들어있는 각각의 값들을 요소 라고 한다
  • 리스트안에는 어떠한 자료형도 포함 가능하다.
  • 리스트는 비어져있을수 있다.
  • 리스트의 인덱스 값을 통해 리스트가 가리키는 값에 접근할 수 있다.
  • 또한 슬라이싱을 통하여 특정한 구간만 가져올 수 있다.
  • append(), pop(), update(), del,sort(), reverse(), index(), remove(),count(), extend(),insert(a,b)

ii) 튜플 (tuple)

tuple_name = value1,value2...
tuple_name = (value1,value2...) 
  • 데이터들의 모음(리스트와 유사)
  • 데이터의 수정은 불가능
  • 인덱싱과 슬라이싱 가능
  • 튜플 사용의 이유 : 안정적이고, 읽는 속도가 빠르다

** iii) range
숫자의 연속

range(a,b,c) # a~b전까지 c만큼 스텝으로 출력  
  • 기본형은 튜플이다

▶ non-squence 자료형

dic_name = {key1:value1, key2:value2...}
dic_name{key_name} = value # 요소 추가
del dic_name{key}          # 요소 제거
dic_name.key()             # key 리스트 생성
dic_name.value()           # value 리스트 생성
dic_name.get(key값)         # key로 요소 출력

i) 딕셔너리 (dictionary)

  • key와 value로 쌍을 저장하는 대용량의 자료구조
  • 순차적으로 즉, 인덱스로 요소를 꺼내는 것이 아닌 key를 통해 요소를 꺼낸다.
  • key값은 중복 불가(요소는 가능)
  • 리스트도 할당 가능

ii) 집합 (set)

set_name = {value1,value2...}
  • 집합은 데이터들의 모임일 뿐 순서는 없다.
  • 리스트나 문자열을 입력해서 생성 가능하다.
  • 중복은 허용되지 않는다.
  • 연산 종류 : 합집합(|), 교집합(&),차집합(-),배타적 집합(^)

4.연산자

▶산술연산자

기호내용
+더하기
-뺴기
*곱하기
/나누기
//
%나머지
**제곱

▶비교연산자

기호내용
<미만
>초과
<=이하
>=이상
==같다
!=같지 않다

▶논리연산자

기호내용
and둘다 ture일 경우 true
or둘중 하나라도 ture면 ture
notture면 false false면 true

5. 형변환

I) 암시적 형변환

파이썬이 자동으로 형을 지정하는 것을 의미함

II) 명시적 형변환

암시적 형변환을 제외하고 나머지는 명시적 형변환


▶ 명시적 형 변환의 방법

  • int(): string, float을 int로 변환

  • float(): string, int 를 float으로 변환

  • str(): int, float, list, tuple, dictionary를 문자열로 변환

  • string -> intger : 형식에 맞는 숫자만 가능

  • integer -> string : 모두 가능

  • 2가지 형 변환을 한 번에 할 수 없음. ex) int('3.5')

  • float을 int로 형변환하면 내림 숫자가 나옴


6. 제어문

6.1 if문(조건문)

if 조건1 :
	조건 1이 참일 경우 수행할 문장
elif 조건2 :
	조건 2가 참일경우 수행할 문장
else :
	거짓일 경우 수행할 문장
  • elif는 중첩 조건문이라고 하며 조건문이 2개 이상일시 사용한다.

6.2 반복문

I) while문

while 조건:          #기본 문장
	수행할 문장
 #예시
num = 1
sum = 0
while num <= 10:
    sum += num
    num += 1  
  • 조건이 참일 동안 반복하여 수행한다.
  • 예시에서 본것 처럼 10인동안 반복한다 주의할 점은 num =11이다.(반복한 후에 수행되기 때문)

II)for문

for i in 컬렉션:
	수행할 문장
  • 컬렉션은 튜플, 리스트등이 들어가며 range또한 자주온다.
  • 컬렉션에 들어있는 문장을 i로 넣은 뒤에 수행한다고 생각하면 편하다.

III) break, continue

  • break : 반복문 종료
  • continue : 이 이후의 코드를 수행하지 않고 다음 요소를 선택해 반복 수행

7. 함수(function)

def func_name(parameter1,parameter2...):   # 함수정의
	code

func_name(arguments1,arguments2...)
  • 수학에서 정의하는 것과 비슷하게 어떤 입력값이 있으면 어떤 출력 값을 리턴해주는 형식
  • 반복적으로 사용할 코드들을 함수로 정의해서 필요시마다 사용
  • parameter(매개변수) : 함수에 입력으로 전달된 값을 받는 변수
  • arguments(인수) : 함수를 호출할 때 전달하는 입력값
    • 위치 인수 : 함수에 인수를 순서대로 넣는 방식. -> 인수의 위치가 정해져 있음
    • 키워드 인자 : 직접적으로 변수의 이름으로 특정인자 넣는 방식
    • 가변 인자 : 정해지지 않은 임의의 개수의 인자를 받기 위한 인자
      : def func(*args)형식으로 작성
      • **되어있으면 dict형식으로 넘기는 것
    • *중요한 사항은 인자들을 작성할때 위치 인자 -> 키워드 인자 순으로 넘겨야한다
  • return을 통하여 결과값을 전달한다 (오직 1개만 반환된다).
    • 1개만 반환한다고 하였지만 일종의 꼼수처럼 리스트에 저장하여 보낼 수도 있으며, 튜플같은 것으로 묶어서 반환이 가능하다

7-1. scope

  • 변수의 범위를 의미한다.
  • 지역변수 : 함수 내부에서 선언된 변수
    • 함수 외부에서 사용 불가
  • 전역변수 : 함수 외부에서 선언된 변수
    • 어디서나 참조 가능

7-2. namespace

  • 객체(Object)를 이름(Name)에 따라 구분할 수 있는 범위를 의미한다. 파이썬 내부의 모든것은 객체로 구성되며 이들 각각은 특정 이름과의 매핑 관계를 갖게 되는데 이 매핑을 포함하고 있는 공간을 네임스페이스라고 한다.
    • name가 필요한 이유는 코드가 길어지게 된다면 함수의 이름이 겹치게 될 수 있기 떄문이다.
  • 전역 네임스페이스: 모듈별로 존재하며, 모듈 전체에서 통용될 수 있는 이름들이 소속된다.
  • 지역 네임스페이스: 함수 및 메서드 별로 존재하며, 함수 내의 지역 변수들의 이름들이 소속된다.
  • 빌트인 네임스페이스: 기본 내장 함수 및 기본 예외들의 이름들이 소속된다. 파이썬으로 작성된 모든 코드 범위가 포함된다.

7-3. scope

  • 변수의 범위를 의미한다. 위의 namespace의 접근성을 고려하기 위한 개념이다.
  • 지역변수 : 함수 내부에서 선언된 변수
    • 함수 외부에서 사용 불가
  • 전역변수 : 함수 외부에서 선언된 변수
    • 어디서나 참조 가능

7-4. 재귀 함수(recursive function)

a = [[1,2],[3,4,5],6,7,[8,9]]
def flatten(data):
	output =[]
    for data_flatten in data:
    	if type(data_flatten) == list:
        	output+=flatten(data_flatten)
        else :
        	output +=[data_flatten]
	return output        
  • 함수 내부에서 자기 자신을 호출하는 함수.
  • 알고리즘을 풀때 가끔식 사용
  • 범위가 좁아지는 문제를 풀기 위해서 사용할 때도 있음
    • base case가 존재.
  • 위에 예시는 리스트 평탄화를 재귀 함수를 통하여 구현한 것이다.
    • 리스트일 경우 다시 flatten함수를 호출하는 것이다.
  • 재귀함수는 짜는 코드는 어렵지만 코드가 더 직관적이고 이해하기 쉬운 경우가 있지만 함수를 호출할 때 마다 메모리가 쌓이기 때문에 속도가 계속 느려진다.
    이 경우에는 리스트나 메모리를 저장하는 경우도 있지만 어쨋든 속도가 매우 느려진다.

7-5. lambda

lambda 매개변수 : 표현식
(lambda 매개변수 : 표현식 )(인자) #람다 표현식 자체를 호출
  • 런타임에서 생성해 사용할 수 있는 익명 함수.
  • 람다식 내에서는 변수 생성 불가
  • 람다식을 인수로 사용해서 작성 가능 (이것때문에 람다 쓰는듯)
i)map(function, iterable)
map(lambda 매개변수 : 표현식, 인자))
list(map(lambda 매개변수 : 표현식, 인자)))
  • map함수는 map(function, iterable)으로 구성되었기에 람다 사용
  • 리스트로 묶는 이유는 어떠한 방식으로 나오는지 확인하기 위해 map는 출력값이 map_object로 나온다.
ii)filter(function, iterable)
  • 참인 결과들을 출력
  • map과 똑같이 list로 묶어야하는데 filter은 출력값이 filter로 나온다.
iii) zip(*iterable)
  • 복수 iterable한 것들을 모아준다
  • return은 튜플의 모음으로 구성된 zip object 형태로 된다. 출력가능한 형태로 바꿔야 한다.

8. 객체지향 프로그래밍(OOP; Object-Oriented Programming)

  • 객체 : 서로 연관된 데이터와 그 데이터를 조작하기 위한 함수를 하나의 집합으로 만들어 놓은것 또는 현실 세계의 사물이라고 한다.
    • 객체는 메소드와 변수로 이루어져있다. (메소드는 뒤에 설명)
  • 객체들을 조립하여서 프로그래밍을 하는것

8-1. 클래스(Class)

  • 객체를 표현하기 위한 문법.
  • 같은 종류 또는 문제 해결을 위한 집단에 속하는 속성(attribute)와 행위(behavior)를 정의한 것
  • 외부의 클래스 등과는 독립적으로 만들어야 한다

I) Class 선언

class Class_name:
	code
-----------    
 #예시
 class poketmon:
 	def __init__(self, name, type, level):
    self.name = name
    self.type = type
    self.level = level
    
 	def att(self):
 	print('{}가 공격을 했다".format(self.name))
    
pikachu = poketmon('pikachu', 'electricity',20)
pikachu.att()
    
  • 선언과 동시에 클래스 객체가 생성이 된다 -> 클래스도 객체이기 때문.
  • 클래스로 만든 객체를 '인스턴스' 라고한다. -> 객체와 인스턴스를 헷갈리는 사람들이 많지만
    예시를 보면 pikachu는 객체이자 poketmon의 인스턴스이다. 즉 pikachu를 지칭할때는 객체라고 하지만 어떤 클래스의 객체인지를 설명할때는 인스턴스라고 한다.
  • 객체를 인스턴스화 하는 것은 위에 눈치챘다시피 pikachu = poketmon('pikachu', 'electricity',20) 이 부분이다. 정확하게 말하면 poketmon클래스에서 생성된 인스턴스를 pikachu라는 변수에 할당한 것이다.

II) class의 속성과 메서드

class 클래스명:
    클래스 속성 =def __init__(self, *args, *kwargs):
        self.인스턴스 속성 =...
  • 속성 : 객체에 생성되는 객체만의 변수를 '속성' 또는 '객체 변수'라고 한다. 인스턴스 속성과는 다르니 주의하자

    • 클래스의 속성 : class안에서 바로 할당하는 변수들
    • 인스턴스의 속성 : 인스턴스별로 독립되어 있는 변수들
      • self를 통하여서 정의한다.
      • 인스턴스명.인스턴스 속성으로 참조 가능
  • 메서드 : 클래스/인스턴스가 할 수 있는 행위(함수)

    • def를 통하여 선언.

    • 인스턴스 메서드

      • 인스턴스가 사용할 메서드
      • 정의 위에 어떠한 데코레이터가 없으면, 자동으로 인스턴스 메서드
      • 첫 번째 인자로 self를 받도록 정의한다.
    • 클래스 메서드

      • 클래스가 사용할 메서드
      • 정의 위에 @classmethod 데코레이터를 사용
      • 첫 번째 인자로 클래스(cls) 를 받도록 정의한다. 이 때, 자동으로 클래스 객체가 cls가 된다.
    • 메서드를 사용할 때 주의점 : 인스턴스/클래스는 인스턴스 메서드나 클래스 메서드도 사용가능하며 정적 메서드도 사용이 가능하다. 그러나 사용은 하지 말자

III) self

  • self는 객체의 인스턴스 그자체를 의미 -> 즉 자기 자신을 참조하라는 매개변수

  • 클래스 내에서 정의된 self는 클래스 인스턴스이다.

  • 위에서 메서드를 선언할때 첫번째 인자는 self라고 하였다. 하지만 항상 self일 필요는 없다. 사실 self를 선언헀을 때와 선언하지 않았을 때의 차이점은 하나이다.
    인스턴스를 생성하고 인스턴스명.메서드() 냐, 클래스.메서드(인스턴스)이냐라는 차이가 발생할 뿐이다.
    클래스에서 인스턴스를 생성을 하면 내장 메모리에 할당이 된다. 물론 할당이 되면 내장 메모리의 주소가 생성이 될것이다. 예를 들어 a라는 클래스에 b라는 변수에 인스턴스를 생성/할당하고 인스턴스의 주소를 4321999라고하자.
    그러면 클래스 a에 대한 인스턴스는 이주소에 할당되어있고 b는 주소 4321999를 알고 있다.
    자 여기까지 이해했다면 반 이상 온것이다.
    그 다음부터는 self는 위에서 클래스 인스턴스라고 하였다. 그러면 self는 해당 주솟값을 알고 있으다는 의미이다. 사실 인스턴스명.메서드는() self가 주소를 알고 있기 때문에 실행이 가능한것이다.
    왜냐하면 파이썬의 인터프리터가 자동으로 self를 인자로 받은 것이기 때문이다. 이를 토하여 클래스 내에 정의한 멤버에 접근할 수 있는 것이기 때문이다. 위와 같은 이유로 클래스.메서드(인스턴스)를 진행하면 실행이 되는것이다.

profile
전공자 학생

1개의 댓글

comment-user-thumbnail
2023년 8월 8일

이런 유용한 정보를 나눠주셔서 감사합니다.

답글 달기