https://velog.io/@jnine/%ED%8C%8C%EC%9D%B4%EC%8D%ACPython-%ED%8A%B9%EC%A7%95-%EB%B0%8F-%EC%9E%A5%EB%8B%A8%EC%A0%90-%EC%A0%95%EB%A6%AC

 

파이썬(Python) 특징 및 장/단점 정리

파이썬 특징: 스크립트 언어, 동적 타입 언어, 플랫폼 독립적2. 장점: 사용이 쉬움, 빠른 개발속도, 높은 확장성 및 이식성3. 단점

velog.io

 

[Python] 파이썬의 []와 list() 의 차이

0. []와 list()란?

1. 예시

(예시1)

(예시2)

(예시3)

2. 참고

참고 자료

# 아래와 같이 bool타입이 들어있는 리스트에
visited = [False] * n

vistied = False 와 같이 잘못작성해서 발생한 에러입니다.

visited[i] = True
visited[i] = False 등으로 작성해줘야 합니다.

파이썬의 pprint

0. 파이썬의 pprint란?

pprint 모듈은 임의의 파이썬 데이터 구조를 인터프리터의 입력으로 사용할 수 있는 형태로 '예쁘게 인쇄'할 수 있는 기능을 제공합니다.
글을 작성하는 이유는 특정 데이터 구조의 길이가 pprint의 기준 이상이 되지 않으면 출력이 print() 와 동일하게 됩니다.
이 경우 마치 pprint가 동작하지 않는 것 처럼 보여 왜 동작하지 않나 하여 직접 디버깅을 해보며 기준을 찾아보았고
또한 pprint는 코딩테스트에서 이차원배열이 사용되는경우가 많아 디버깅시 많이 이용하는 모듈이라 이번 기회에 찾아보게 되었습니다.

1. 예시

(예시1)

# 입력
arr1 = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]

#출력
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]

이쁘게 출력 안해주는 모습

(예시2)

# 입력
arr2 = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16], [17,18,19,20]]

#출력
[[1, 2, 3, 4],
 [5, 6, 7, 8],
 [9, 10, 11, 12],
 [13, 14, 15, 16],
 [17, 18, 19, 20]]

이쁘게 출력 해주는 모습

(예시3)

# 입력
arr3 = [[1,2,3,4,5,6,7,8,9,10],[11,12,13,14,15,16,17,18,19,20]]

# 출력
[[1,2,3,4,5,6,7,8,9,10],[11,12,13,14,15,16,17,18,19,20]]

이쁘게 출력 안해주는 모습

(예시4)

# 입력
arr4 = [[1,2,3,4,5,6,7,8,9,10],[11,12,13,14,15,16,17,18,19,20],[21,22,23,24,25,26,27,28,29,30]]

# 출력
[[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
 [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
 [21, 22, 23, 24, 25, 26, 27, 28, 29, 30]]

이쁘게 출력 해주는 모습

위와 같이 '특정 기준'을 넘어야 이쁘게 출력해줌을 알 수 있습니다.
option으로 해당 기준을 변경할 수 있는 것인지 찾아봤지만 아직찾지못했습니다.
정확한 default 기준이 무엇인지는 찾아봐야 알 것 같습니다.

2. 참고

공식 문서
참고 자료

파이썬의 타입 어노테이션(type annotations)

0. 타입 어노테이션(type annotations)란?

Type TypeAnnotating은 PEP 484에 추가된 새로운 기능으로, 변수에 타입 힌트를 추가할 수 있습니다.
코드를 읽는 사람에게 어떤 타입의 변수를 예상해야 하는지 알려주는 데 사용됩니다.
이 힌트는 동적 타입의 Python에 정적 타입의 컨트롤 감각을 가져옵니다.
이는 변수 또는 메서드를 초기화/선언한 후 지정된 타입 선언을 추가하는 방식으로 수행됩니다.

1. 왜 사용하는데?

정적으로 입력된 언어의 유용한 기능은 변수의 값을 특정 도메인 내에서 항상 알 수 있다는 것입니다.
예를 들어 문자열 변수는 문자열, int형 변수는 int만 사용할 수 있습니다.
동적으로 입력되는 언어(Python)에서는 기본적으로 변수의 자료형이 무엇인지 또는 그 결과가 무엇인지 추측할 수 없습니다.

2. 예시

기본형

my_var: <type> = <value>

위와 같은 기본형을 가집니다.

예시

age: int = 5
print(age)
# 5

타입 어노테이션은 런타임 시간에 영향을 미치지 않는다는 점에서 주목할만 합니다.
이러한 힌트들은 인터프리터에의해 무시되고 오직 가독성을 증가시키기 위해 사용됩니다.
그러나 이러한 타입 힌트들은 실행시 강제되지 않으므로 확인하는 것은 여전히 코드의 메서드, 함수, 블록에 달려있습니다.

3. 어노테이션의 함수&메서드

함수를 쓰거나 호출할 때 예상 변수의 타입을 사용하여 매개 변수를 올바르게 전달하고 사용할 수 있습니다.
함수가 int를 예상할 때 str을 통과하면 예상대로 작동하지 않을 가능성이 높습니다.
아래의 코드에서 확인할 수 있습니다.

def mystery_combine(a: str, b: str, times: int) -> str:
    return (a + b) * times

함수의 파라미터에 : str 및 : int를 추가하여 어떤 타입이어야 하는지를 나타냅니다.
이렇게 하면 코드를 더 명확하게 읽을 수 있고, 그 목적을 좀 더 명확하게 알 수 있을 것입니다.

또한 -> str을 추가하여 이 함수가 str을 반환함을 나타냅니다.
'->' 을 사용하면 어떤 함수나 메서드의 반환값 타입을 보다 쉽게 표시할 수 있어 향후 개발자의 혼란을 피할 수 있습니다!

이 경우에도 처음의 잘못된 방법으로 코드를 호출할 수 있지만, 좋은 리뷰를 통해 프로그래머가 의도하지 않은 방식으로 함수를 사용하고 있음을 알 수 있기를 바랍니다. 타입 어노테이션과 타입 힌트는 팀 및 멀티 개발자 Python 애플리케이션에 매우 유용합니다.
코드 판독에서 대부분의 추측을 제거합니다!

이를 한 단계 더 확장하여 기본 인수 값을 처리할 수 있습니다.
times 파라미터의 디폴트 인수값으로 2를 사용하기 위해 아래 mistery_combine을 수정했습니다. 이 기본값은 타입 힌트 뒤에 배치됩니다.

def mystery_combine(a: str, b: str, times: int = 2) -> str:
    return (a + b) * times

4. 참고

참고 자료

+ Recent posts