본문 바로가기
Computer & Program/python

[python] Python 특징

by TDRemon 2024. 3. 12.
반응형

안녕하세요. TDR입니다.

오늘은 전통적인 언어(ex. Java, C++)들과 Python 언어의 차이와 특징들을 간략히 정리해 보겠습니다.

라인 끝에 세미콜론(;), 중괄호가 없음

이거는 앞선 정리에서 수 없이 봐왔고 이미 아시겠지만 Java나 C++과 같은 언어와 달리 line의 끝을 명시하는 세미콜론(;)이나 중괄호가 없습니다. 그래서 중요한 것이 indent(들여쓰기)입니다. 이를 통해 python에서는 영역을 구분하고 있습니다. 그러다보니 위의 예시로 들었던 언어를 주로 사용하시던 분들은 익숙하지 않아 사용하기 껄끄럽다는 얘기를 많이 합니다. 개인적으로는 오해려 그렇기 떄문에 코드를 더욱 간결하게 만들고 구조에 더 집중할 수 있어서 좋아합니다.

사람마다 취향 차이는 있겠지만 코드가 너무 가로로 퍼지는 것을 선호하지 않아, tab size를 2칸으로 해서 사용하시는 분들도 있습니다.

 

변수 타입 없음

Javascript에서는 let, const, var와 같은 변수를 선언하는 방법이 있습니다. 하지만 python 그런 키워드 조차 없습니다. 그냥 선언하면 됩니다. 그래서 처음 python을 사용하시는 분들은 이질감이 심하다고 합니다. 하지만 이 부분은 변수의 이름을 명확히하고 구조를 잘 구축하여 복잡성을 낮추면 충분히 해결되는 문제라고 생각됩니다.

사실 애초에 python은 간단한 script를 위해 만들어진 언어다보니 태생부터 어쩔 수 없는 부분이 있습니다.

 

elIf

많은 언어들이 if - else if - else 와 같은 키워드를 사용합니다. 하지만 python은 조금 특이한게 if - elif -else와 같이 사용합니다. 즉, else if를 하나로 합쳐서 elif라고 쓰는 겁니다. 이건 언어의 특징이니 그냥 받아 들이면 되는 문제라고 생각됩니다. 또, 이게 쓰다보면 어쩄든 짧다보니 편해지기도 합니다.

 

pass 존재

개인적으로 중괄호가 없기 떄문에 생긴 것이라고 생각하고 있습니다. 아래 예시를 통해 보면,

## Java
funcion some_function() {
}

## Python
def some_function():
    pass

첫번째 특징과도 연관되어 있는데, 다른 언어의 경우 중과호만 열어 놓고 내용을 비워놓으면 그냥 내용이 선언되지 않은 함수라고 인식이 됩니다. 하지만 python의 경우, 중괄호가 없기 때문에 만약 그냥 비워 놓고 그 아래 코드를 작성을하면 python 입장에서는 그 아래 내용이 마치 들여쓰기를 제대로 지키지 않은 함수 코드로 인식이 됩니다. 그래서 pass라는 키워드를 통해 명시적으로 해당 함수의 내용은 아무것도 없다고 알려줘야 합니다. 참고로 pass는 함수 뿐만 아니라 class에서도 사용할 수 있습니다.

 

전위, 후위 연산자 없음

이건 살짝 아쉽다고 생각하는 부분인데, ++a, a++과 같이 전위, 후위 연산자가 없습니다. 그래서 a += 1과 같이 쓰는 것이 최선의 방법입니다. 왜 없는지 찾아 봤는데 전위, 후위 연산자가 복잡성을 높이고 가독성을 떯어 트린다는 글을 봤습니다. 반복문의 index와 같은 데서 사용하면 사실 잘 보지 않으면 햇갈린만한 요소가 충분하다고 생각이 됩니다.

그리고 변수의 타입이 없기 때문에 string이나 collection, 함수 등에 ++를 쓰게 될 위험도 있기 때문에 어찌 생각하면 없는게 나을지도 모른다는 생각도 듭니다.

 

&&, || 대신 and, or 키워드 사용

전통적인 언어에서는 논리 연산 관련해서는 기호를 쓰는 것을 더 선호했습니다. 컴퓨터 사양에 여유가 없을 때는 메모리든 뭐든 조금이라도 적게 쓰는 것이 미덕이였던 시절이라고 생각합니다. 하지만 어느 순간 컴퓨터의 사양에 크게 구애 받지 않게되다보니 가독성과 생산성을 우선하는 시대가 왔습니다. $$, || 대신 and, or 키워드를 사용하는 것도 가독성을 높이기 위한 일환이 아닐까 생각합니다. 

 

멀티 리턴 가능 (일종의 unpacking)

제가 python을 처음 접하면서 가장 신선하게 느꼈고 참 좋아하는 특징이기도 합니다. 다른 언어의 경우 함수의 return은 무조건 하나 밖에 안되기 떄문에 reference를 이용하여 객체를 전달하여 값을 채우거나, 객체에 return할 값들을 담아서 넘겨 받아 하나씩 빼서 사용해야 했습니다. 하지만! python에서는 그럴 필요가 없습니다.

def multi_return_function():
    return 'python', ['is', 'great!'], 30000
    
name, content_list, size = multi_return_function()
## Result ##
name = 'python'
content_list = ['is', 'great!']
size = 30000

위와 같이 한번에 여러 타입의 값을 여러개 반환이 가능합니다! 이게 가능하기 떄문에 굳이 함수 내부에서 객체에 값을 채울 필요도, 반환 받은 객체에서 필요한 값을 찾아 꺼낼 필요도 없습니다. (아름다운 세상)

그리고 아래와 같이 재밌는 특징도 있습니다. (swap)

## Usual Language ##
a = 1;
b = 2;
temp = a;
a = b;
b = temp;

## Python ##
a = 1
b = 2
a, b = b, a

## Result ##
a = 2
b = 1

전통적인 언어에서는 서로 값을 바꾸기 위해서는 임시 변수(temp)들이 필요 했습니다. 하지만 python에서는 저게 되나? 싶은 형태로 가능합니다. 예시가 단순히 2개의 값을 바꾸는 것이기 떄문에 크게 차이가 없어 보일지 모르지만, 만약 교체해야 하는 변수들이 5~7개만 되고 복잡성이 앞도적으로 높아 집니다.

 

오늘은 python의 특징들을 간략히 살펴 보았습니다. 위 내용 외에도 comprehension과 같인 유용한 특징들도 있지만 글이 너무 길어져서 오늘은 이 정도에서 마무리 하겠습니다.

반응형

'Computer & Program > python' 카테고리의 다른 글

[python] for & while & print  (0) 2024.03.16
[python] String(문자열) 포함 여부 확인  (0) 2024.03.14
[python] Package & Module  (0) 2024.03.10
[python] Format(f-string)  (0) 2024.03.07
[python] Format(String Formatting)  (0) 2024.03.06

댓글