파이썬 허접 규링이 본 파이썬 3 vs 파이썬 2.7

규링은 그냥 파이썬을 쓸 줄만 안다. 어느정도 필요한 유틸 만들고 하는 정도로만 쓰지 그보다 더 제대로 하냐고 물으면 아니다. (규링의 자바 실력과 마찬가지다. 앱 개발따윈 할 수 있지만 자바 특유의 디자인 패턴법이나 그런 건 잘 모른다.)

게다가 이 글을 쓰는 시기가 좀 여러모로 규링이 힘든 시기인데…. 머리 좀 식히고 맘 좀 바꿔보고 하려고 규링이 봤을 때 확실하게 차이나는 코드 규칙들을 적어보려 한다. 책에서는 더 자세히 나와있겠지만, 규링이 직접 코드 짜면서 확인한 것들은 이것들인데, 아마 이게 다인 거 같기도 하다.

  • print

print는 가장 먼저 배우는 출력할 문자열을 처리하는 함수다. 이 함수를 이용할 때, 파이썬 3에서는 괄호를 이용하도록 바뀌어 있다.

3: print (“Hello Kyuling”)
2.7: print “Hello Kyuling”

파이썬을 나중에 배운 친구들은 파이썬 2의 경우에 2.7 기반으로 배운 친구들이 많다. 그들은 저 괄호를 쓰는 걸 이상하게 여기지 않는다. 그러나, 그 전 버전의 파이썬을 쓰던 친구들은 아마 알 것이다. 2.6.x까진 괄호 쓰면 에러난다.

  • line break

줄바꿈은 print 함수에 항상 문자열 마지막을 줄바꿈 문자인 ‘\n’으로 만들어준다. 그러나, 줄바꿈을 하지 않고 싶을 경우가 생기기도 하는데, 그럴 경우에 이용하는 방법이 존재하는데, 이 부분에서 서로 다른 구조를 가진다.

3: print (“no more words.”, end=” “);print (“OK”)
2.7 print “no more words.”,;print “OK”

파이썬 3에는 end 파라미터를 지정하면 끝에 문자를 별도로 지정할 수 있다. 지정하지 않으면 기본 문자로 줄바꿈이 실행된다. 반면 파이썬 2.7에서는 문자열의 끝에 콤마를 이용하면 된다.

  • Automatic type conversion

파이썬 3에서는 숫자 연산 시 자동으로 형 변환이 진행된다. 단, 2.7의 경우에는 형 변환을 지정하지 않으면 일반 안된다. 2를 배울 때 숫자 연산 부분에서 많은 이야기를 하는 부분이다.

3:
>>> 3 / 4
0.75

2.7:

>>> 3 / 4
0
>>> 3 / 4.0
0.75

  • input / raw_input

파이썬 3의 input 함수와 파이썬 2.7의 raw_input 함수는 동일한 함수다. 근데 파이썬 2.7에서 존재하던 input 함수는 3에는 존재하지 않는다. (왜 이딴 식으로 헷갈리게 만들어 썅!!!)

3: taste = input(“맛이 어떠한가요:”)
2.7: taste = raw_input(“맛이 어떠한가요:”)

  • code encoding

파이썬 3에서는 utf-8이 기본 소스코드 인코딩이다. 그러나 2.7에서 기본 소스코드 인코딩을 urf-8으로 이용하기 위해서는 소스코드 첫 줄에 다음과 같은 문자열을 적어야 한다.

# -*- coding: utf-8 -*-

개인적으로는 안적어도 된다는 거 자체만 해도 무지 좋다.

  • error handling

try … except … 를 이용하여 에러를 처리할 때, 에러 변수명 e에 대해서 표기하는 방법이 조금 차이가 있다.

3:
try:
4 / 0
except ZeroDivisionError as e:
print (e)

2.7:
try:
4 / 0
except ZeroDivisionError, e:
print (e)

단순한 에러 상황을 만들어보았다. 3에서는 에러 타입 뒤에 as라고 작성하고, 2.7에서는 e라고 작성하면 된다. 규링은 3가 되어서 저렇게 바뀐 쪽을 더 좋아한다. 코드가 더 명확한 느낌이 나서 좋다고 본다.

일단 규링이 아는 부분에 대해서는 이 정도가 전부다. 그 외에 책들에서는 여러 부분이 다르다고 알려주겠지만, 이 내용들은 확실하게 차이가 나는 내용들이다. 그러므로 가장 조심해야 되는 부분이라 생각하고, 이 내용을 제외하면 버전에 상관 없는 코드를 만들 수 있다고 본다.