인덴트(들여쓰기)
파이썬의 대표적인 특징이기도 한 인덴트는 공식 가이드인 PEP 8에 따라 공백 4칸을 원칙으로 한다. 파이썬에선 코드 구분을 위한 중괄호가 없기 때문에 이 들여쓰기로 구문을 구분하게 되니 반드시 잘 숙지해야 한다.
class ParentClass:
def __init__(self):
# 들여쓰기
self.name = 'parent'
self.number = 10
# 들여쓰기
def __str__(self):
return f'ParentClass name : {self.name}, number : {self.number}'
# 들여쓰기
def add_num(self, new_number):
print('부모 : ', new_number, '만큼 더해야지')
self.number = self.number + new_number
# 들여쓰기
def minus_num(self, new_number):
print('부모 : ', new_number, '만큼 빼야지')
self.number = self.number - new_number
# 들여쓰기
def multiple_num(self, new_number):
print('아낌없이 주는 부모 : 자식아 넌 곱하기 함수 없지? 괜찮아 내가 줄게')
self.number = self.number * new_number
네이밍 컨벤션
파이썬은 변수명을 스네이크 케이스를 따라 작성한다.
long_name_function
타입 힌트
파이썬은 동적 언어임에도 타입을 지정할 수 있는 타입 힌트가 PEP 484 문서에서 추가되었다. 자바스크립트를 아울러 타입까지 지정할 수 있는 타입스크립트가 영향력을 키워가는 만큼 코드의 가독성과 버그 유발의 주범을 잡기위한 보강책으로 보여진다.
a : int = 1
b : str = “1”
리스트 컴프리헨션
직관적으로 리스트를 생성하는 방법이다.
# 기본 출력 방법
li = []
for i in range(5):
li.append(i)
# print(li)
# [0, 1, 2, 3, 4]
# 리스트 컴프리헨션
li2 = [i for i in range(5)]
print(li2)
# [0, 1, 2, 3, 4]
li3 = list(range(5))
print(li3)
# [0, 1, 2, 3, 4]
# 딕셔너리에서 리스트 컴프리헨션
original = {'key1':'value1'}
a = {}
for key, value in original.items():
a[key] = value
# 다음과 같이 리스트 컴프리헨션으로 표현 가능
original = {'key1':'value1'}
a = {key: value for key, value in original.items()}
제너레이터
루프의 반복 동작을 제어할 수 있는 루틴 형태이다. 반복을 필요할 때만 불러서 실행하니 점유하는 메모리 공간이 제너레이터가 없을 경우에 대비하여 현저히 적다.
대표적인 제너레이터 = range()
import sys
a = [n for n in range(1000000)]
b = range(1000000)
print(len(a))
# 1000000
print(len(b))
# 1000000
print(len(a) == len(b))
# Ture
print(sys.getsizeof(a))
# 8448728
print(sys.getsizeof(b))
# 48
enumerate
순서가 있는 자료형을 인덱스를 포함한 enumerate 객체로 리턴한다. → 인덱스와 함께 출력 된다.
a = [1, 2, 3, 453, 121, 23]
enumerate(a)
print(list(enumerate(a)))
# [(0, 1), (1, 2), (2, 3), (3, 453), (4, 121), (5, 23)]
for i in range(len(a)):
print(i, a[i])
# 0 1
# 1 2
# 2 3
# 3 453
# 4 121
# 5 23
나눗셈 연산자
파이썬 2 이하에서는 기본 나눗셈 연산자는 타입을 유지하는 특성때문에 정수만 반환했는데 파이썬 3 부터는 정수형을 유지한다.
추가로 // 연산자가 추가되어 기존에 있던 나눗셈 연산자의 기능을 사용할 수 있게 두었다.
print(5 / 3)
print(5 // 3)
print(type(5 // 3))
print(type(5 / 3))
# 1.6666666666666667
# 1
# <class 'int'>
# <class 'float'>
# 나머지만 구하는 연산자
print(5 % 3)
# 2
# 몫과 나머지를 한 번에 구하는 연산자
print(divmod(5, 3))
# (1, 2)