본문 바로가기
Programming/Code Archive

[파이썬Python] 초심자가 알아야 할 네 가지 유용한 기능

by 지표덕후 2021. 9. 10.
반응형

배움에는 끝이 없습니다. 파이썬도 마찬가지라서 아무리 코딩해도 배울 게 계속 생깁니다. 충분히 알았다 생각하면 또 어디선가 유용한 기능이 발견되고, 또 발견되고, 끊임없이 발견되고… 

파이썬의 모든 것을 한 번에 배울 수 있는 단행본이나 웹사이트란 존재하지 않습니다. 공식 문서조차도 모든 걸 알려주진 못 합니다. 파이썬을 통해 구현할 수 있는 것들이 무궁무진하기 때문에 그렇습니다.

제가 수 년 동안 파이썬을 코딩하면서 발견했던 흥미로운 기능들이 있습니다. 그건 파이썬만의 독특한 기능이라 다른 프로그래밍 언어에서는 좀처럼 발견되지 않는 기능들입니다. 그 중에서도 파이썬 초심자들이 알아두면 좋을 것 같은 네 가지 기능들을 풀어볼까 합니다.


1. for-else Loop


파이썬의 '조건문'은 잘 알고 계실 겁니다.

while loop 구문은 당연히 아실 거고,
for loop 구문 너무 쉽고,
if else 절 맨날 쓰는 거고.

그런데 for else 절이라니? 그게 뭐지요.

def test(nums):
    for i in nums:
        if i == 0: # if the condition is satisfied, it hits break and the else block will not run
            print('There is a 0.')
            break
    else:
        print('There are no 0s.')
        
test([1,2,3,0]) # There is a 0.
test([1,2,3])   # There are no 0s.

else 구문 내 코드들은 for loop 구문이 break 선언 없이 완료되어야 작동합니다. 만약 break 구문에 대해 잘 모른다면 이 아티클을 읽어보면서 학습하시기 바랍니다. 

for-else loop 구문은 정말로 유용합니다? for _ in range(3) loop : 에서 사용자는 올바른 패스워드를 입력하기까지 세 번의 기회를 가집니다. 그리고 비번을 제대로 입력했을 때에만 break가 활성화됩니다. else 구문에는 잘못된 비번을 세 번 연속 입력했을 때에 발생할 결과가 담겨 있습니다. 예컨대 시스템을 잠궈버리는 것이지요.


2. 부등호 연결(Comparison Operator Chaining)


변수 a의 값이 0과 100 사이의 값인지 확인해보려 한다고 칩시다. 그럴 때 당신은 두 가지 부등식을 and로 결합할 수 있습니다. 즉, o <= a and a <= 100 쉽지요.

그런데 부등식을 연결하고 사람이 더 직관적으로, 읽기 좋은 방식으로 쓰면 0 <= a <= 100일 겁니다. 인터프리터는 이 부등식을 찢어서 부등항을 o <= a and a <= 100, 이런 식으로 읽어낼 겁니다.

a = 25
0 <= a <= 100       # True
0 <= a and a <= 100 # True
# The two expressions above are equivalent in Python

당신은 부등식을 더 길게 뺄 수도 있습니다.  0 < a < 10 < b < 100 이렇게요.


3. 분할 방식


a[start:stop:step] 이런 방식의 문법(syntax)를 활용해서 우리는 list를 자를 수 있습니다. 세 번째 step 인자는 생략 가능합니다. 이 문법의 뜻은 일련의 요소들을 start 지점부터 stop 지점 사이의 부분을 떼어내라는 것입니다. step 인자에 값이 들어가 있다면, startstop 사이의 연속적인 요소들을 step 만큼의 간격으로 추출하게 됩니다. step size는 정수이어야 하며, 음수가 될 수도 있습니다.

a = list(range(10))
print(a[::2])   # [0, 2, 4, 6, 8]
print(a[3::-1]) # [3, 2, 1, 0]

우리는 step 인자를 -1로 바꾸기만 하면 리스트는 역순으로 나열됩니다. step 인자를 지정하지 않으면 기본적으로 +1의 값이 적용됩니다. 즉, 기본적으로는 리스트의 어떤 요소도 생략되지 않으며 순서도 역순으로 반전되지 않는다는 것이지요.


4. 값 뒤바꾸기(Value Swapping)


파이썬에서 두 가지 객체의 값을 어떻게 뒤바꿀(swap) 수 있을까요? 무척 쉽습니다. 그냥 temp 라고 임시 객체를 생성해주기만 하면 됩니다. 다른 언어에서 했던 것처럼요.

# Standard way to swap values of two objects in other languages
temp = a
a = b
b = temp

그런데 위의 방법은 독해가 쉽지 않고 엘레강스하지도 않습니다. 파이썬에서는 단 한 줄의 코드로 값을 아주 손쉽게, 직관적으로 뒤바꿀 수 있습니다.

# Standard Python way to swap values
b, a = a, b

어떻게 작동하는 걸까요? 인터프리터는 먼저 우항에 있는 객체를 확인하여 (a, b)라는 튜플 데이터를 메모리에 저장합니다. 그러고서는 튜플의 두 개 요소들을 좌항의 어디에 unpack 할지를 평가해 b와 a에 각각 할당합니다.

반응형

댓글