[2부 3장]파이썬

soyeon·2022년 6월 27일
0

파이썬 문법

기본 파이썬 문법을 익힌 후, 개발 역량을 높여줄 고급 파이썬 문법을 소개한다.

인덴트(공백)

공식 가이드인 PEP 8에 따라 공백 4칸이 원칙이다.

  • 다음 줄에 파라미터를 쓸 때는 첫번째 줄 시작에 맞춘다.
foo = long_function_name(var_one, var_two
						 var_three, var_four)
  • 첫번째 줄에 파라미터가 없을 때는 인덴트를 한 번 더 추가한다.
def long_function_name(
		var_one, var_two, var_three,
        var_four):
    print(var_one)

네이밍 컨벤션(Naming Convention)

스네이크 케이스(Snake Case)

: 각 단어를 밑줄(_)로 구분한다.

카멜 케이스를 사용하는 자바와 다르다.

# 카멜 케이스
camelCase: int = 2

# 스네이크 케이스
snake_case: int = 3

타입 힌트(Type Hint)

파이썬은 동적 타이핑 언어로 원래는 변수의 타입을 적어주지 않지만 가독성을 위해 타입 힌트가 추가되었다.

  • 변수 선언
a: str = "1"
b: int = 3
  • 함수 정의
    : 함수의 파라미터는 int형이고, return 값은 True/False가 될 것이다.
def fn(a: int) -> bool:
	...

타입 힌트는 강제 규약은 아니기 때문에 꼭 지켜야 하는 것은 아니지만, 코드 리뷰 시에 타입을 지정하는 것이 좋다.

mypy 모듈
: 타입 힌트에 오류가 있는지 확인해준다.

$ pip install mypy
$ mypy solution.py

타입 힌트가 잘못되면 Incompatible return value type 오류가 발생한다.

리스트 컴프리헨션(List Comprehension)

직관적으로 리스트를 생성하는 것으로, 여러 줄에 거쳐서 쓸 코드를 한 줄로 쓸 수 있게 해준다.

  • 2차원 배열 선언
    : 0으로 채워진 n*m 배열 선언하기
arr = [[0 for _ in range(m)] for _ in range(n)]
  • 홀수인 경우 2를 곱해서 출력하기
[print(n, end=' ') for _ in range(1, 11) if n % 2 == 1]

제너레이터(Generator)

기존에 사용하는 함수에서는 return을 하면 리턴하려는 모든 값을 배열로 만들어서 리턴한다. 제너레이터는 이 방법 대신에 yield를 이용하여 한 번에 한 개의 값씩 리턴한다.

  • 제너레이터 함수
>>> def get_natural_num():
        n = 0
        while True:
            n += 1
            yield n
  • next()로 사용
>>> g = get_natural_num()
>>> for _ in range(100):
	    print(next(g))

1
2
3
.
.
.
99
100

range

제너레이터 방식을 활용하는 대표젹인 함수이다. range 범위의 숫자들을 리스트로 미리 생성해서 사용하는 것이 아니라 제너레이터 방식으로 계속해서 생성해서 사용한다.
range는 range 클래스를 리턴하는데 이 클래스에는 생성 조건만 담겨져 있기 때문에 메모리 점유율이 현저히 적다. 미리 생성되어 있는 것이 아니기 때문에 인덱스로 바로 접근이 불가할 것 같지만 바로 생성되기 때문에 이 또한 가능하다.

enumerate

'열거하다'라는 뜻을 가진 함수로, 여러 가지 자료형에 인덱스를 포함시켜서 enumerate 객체를 리턴 해준다.

  • enumerate 사용 예시
>>> arr = [1, 3, 4, 35, 8, 13]
>>> enumerate(a)
>>> list(enumerate(a))

[(0,1), (1,3), (2,4), (3,35), (4,8), (5,13)]
  • for in 문에서 인덱스 사용하고 싶을 때
    : 인덱스를 따로 관리해야 해서 깔끔하지 않다.
i = 0
for item in arr:
	print(i, item)
    i += 1
  • enumerate()를 활용하여 인덱스 처리
for i, item in enumerate(arr):
	print(i, item)

나눗셈 연산자( // )

나눗셈을 하는데 정수형 결과를 내림하여 리턴해준다. 몫을 구하는 연산자이다. 나머지를 구할 때는 %를 사용한다.

몫과 나머지 동시에 구하기

>> divmod(5,3)
(1,2)

print

print 함수는 기본적으로 줄바꿈을 해준다.

  • 구분자 지정
print(A, B, sep=',')

A,B
  • 줄바꿈 제한
print(A, B, end=' ')

A B
  • 리스트 출력
arr = ['A', 'B']
print(' '.join(arr))

A B
  • 리스트 요소 사이에 어떠한 값을 끼워넣고 싶을 때
arr = ['A', 'B']
print('@@@'.join(arr))

A@@@B

pass

널 연산으로 아무것도 하지 않는다. 함수를 선언해 놓고 나중에 구현하려고 할 때 주로 사용한다.

locals

모든 로컬 변수를 출력해준다.

import pprint

pprint.pprint(locals())

0개의 댓글