Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Python 2 or Python 3? - (Finally) Understanding...
Search
yyyyyyyan
October 21, 2018
Programming
3
130
Python 2 or Python 3? - (Finally) Understanding the differences between the two main versions of the language
yyyyyyyan
October 21, 2018
Tweet
Share
More Decks by yyyyyyyan
See All by yyyyyyyan
como funcionam as senhas e por que não funcionam: tentando resolver um problema sem solução
yyyyyyyan
1
42
[PyCon APAC 2022] Writing secure code in Python
yyyyyyyan
1
160
Writing secure code in Python
yyyyyyyan
1
260
Escrevendo códigos seguros em Python
yyyyyyyan
2
360
Entendendo sockets no Python criando um bot de IRC
yyyyyyyan
1
390
Python 2 ou Python 3?
yyyyyyyan
1
130
Criando um malware com Python
yyyyyyyan
3
5.6k
Creating a malware using Python
yyyyyyyan
1
510
Other Decks in Programming
See All in Programming
状態遷移図を書こう / Sequence Chart vs State Diagram
orgachem
PRO
2
230
DMMを支える決済基盤の技術的負債にどう立ち向かうか / Addressing Technical Debt in Payment Infrastructure
yoshiyoshifujii
4
480
副作用と戦う PHP リファクタリング ─ ドメインイベントでビジネスロジックを解きほぐす
kajitack
2
310
Yes, You Can Work on Rails & any other Gem
kaspth
0
110
型で語るカタ
irof
0
750
ソフトウェア品質を数字で捉える技術。事業成長を支えるシステム品質の マネジメント
takuya542
2
15k
What's new in AppKit on macOS 26
1024jp
0
160
効率的な開発手段として VRTを活用する
ishkawa
1
170
ペアプロ × 生成AI 現場での実践と課題について / generative-ai-in-pair-programming
codmoninc
2
22k
AI時代のソフトウェア開発を考える(2025/07版) / Agentic Software Engineering Findy 2025-07 Edition
twada
PRO
101
38k
PHPカンファレンス関西2025 基調講演
sugimotokei
5
810
新メンバーも今日から大活躍!SREが支えるスケールし続ける組織のオンボーディング
honmarkhunt
5
8.9k
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.4k
GraphQLとの向き合い方2022年版
quramy
49
14k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
21k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
The Pragmatic Product Professional
lauravandoore
35
6.8k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
The World Runs on Bad Software
bkeepers
PRO
70
11k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Transcript
Hello! I'm Yan Orestes Content creator on 1 @yanorestes
Python 2 X Python 3 Which version to learn? 2
Python 2 X Python 3 Which version to learn? Which
version to code with? 3
Wait what about backward compatibility? 4
backward compatibility 5
design failures Python 2 6
design failures Python 3 7
8 Python 2 or Python 3? (Finally) Understanding the differences
between the two main versions of the language
Subtle changes 1. 9
Python 2 >>> print 'Hello, world!' Hello, world! 10
>>> print 'Hello, world!' File "<stdin>", line 1 print 'Hello,
world!' ^ SyntaxError: Missing parentheses in call to 'print'. Did you mean print('Hello, world!')? Python 3 11
Python 2 & Python 3 >>> print('Hello, world!') Hello, world!
12
raw_input X input 13
raw_input X input Python 2 Python 3 14
Python 2 >>> input() Hello! Traceback (most recent call last):
File "<stdin>", line 1, in <module> File "<string>", line 1 Hello! ^ SyntaxError: unexpected EOF while parsing 15
Lazy evaluation 2. 16
range function X class 17
range function X class list instance Python 2 Python 3
18
Python 2 >>> range(10**10) Traceback (most recent call last): File
"<stdin>", line 1, in <module> MemoryError 19
Python 3 >>> range(10000**10000) range(0,1000000000000000000000 00000000000000000000000000000 00000000000000000000000000000 00000000000000000000000000000 00000000000000000000000000000 00000000000000000000000000…)
20
Python 2 But what about xrange? 21
Python 2 >>> range(10**10) xrange(0,10000000000) 22
Python 2 >>> xrange(10000**10000) Traceback (most recent call last): File
"<stdin>", line 1, in <module> OverflowError: Python int too large to convert to C long 23
Numbers 3. 24
large numbers long X int 25
Python 2 >>> sys.maxint 9223372036854775807 >>> sys.maxint + 1 9223372036854775808L
>>> type(sys.maxint + 1) <type 'long'> 26
Python 3 >>> sys.maxsize 9223372036854775807 >>> sys.maxsize + 1 9223372036854775808
>>> type(sys.maxsize + 1) <class 'int'> 27
int division Python 2 X Python 3 int float 28
Python 2 >>> 4/2 2 >>> 3/2 1 29
Python 3 >>> 4/2 2.0 >>> 3/2 1.5 30
Python 2 e Python 3 >>> 3//2 1 >>> 3/2.0
1.5 31
"Text" 4. 32
Python 2 >>> type('Hello, world!') <type 'str'> >>> type(u'Hello, world!')
<type 'unicode'> 33
Python 2 str unicode bytes texto 34
Python 2 >>> len('Ā') 2 >>> len(u'Ā') 1 35
Python 3 bytes str bytes text 36
Python 3 >>> type('Hello, world!') <class 'str'> >>> type(u'Hello, world!')
<class 'str'> >>> type(b'Hello, world!') <class 'bytes'> 37
Python 3 >>> π = 3.14 >>> π 3.14 38
GIF identifier def is_gif(filename): with open(filename, 'rb') as f: id
= f.read(6) return id == 'GIF89a' 39
id de GIFs Python 2 True Python 3 False 40
GIF identifier def is_gif(filename): with open(filename, 'rb') as f: id
= f.read(6) return id == b'GIF89a' 41
Comparison 5. 42 • == != • > < •
>= <=
43 cmp e __cmp__ -1 (<), 0 (==), 1 (>)
44 cmp e __cmp__ -1 (<), 0 (==), 1 (>)
45 Python 2 all objects are ordinally comparable
46 Python 2 all objects are ordinally comparable ??????????
47 Python 2 >>> foo = MyClass() >>> foo <
'a' True >>> foo < 1 True >>> foo < [] True
48 Python 2 >>> 999999999 < 'a' True >>> 999999999
< [] True >>> 999999999.99 < [] True
49 Python 2 >>> ' ' > [] True >>>
'str' > 'list' True
50 Python 3 >>> ' ' > [] Traceback (most
recent call last): File "<stdin>", line 1, in <module> TypeError: '>' not supported between instances of 'str' and 'list'
Indentation 6. 51
52 Python 3 >>> while True: ... print('hello') ... print('bye')
File "<stdin>", line 3 print('bye') ^ TabError: inconsistent use of tabs and spaces in indentation
53 Which version to learn? (and which to teach?)
54 Which version to code with?
55 2014 - Python 2 78% X 22% Python 3
56 2014 - Python 2 78% X 22% Python 3
2016 - Python 2 60% X 40% Python 3
57 2014 - Python 2 78% X 22% Python 3
2016 - Python 2 60% X 40% Python 3 2017 - Python 2 25% X 75% Python 3
58 Making your program more portable
Python 2 & Python 3 >>> print('Hello, world!') Hello, world!
from sys import version_info if version_info.major == 3: input() else:
raw_input() 60
from sys import version_info if version_info.major == 3: input() else:
raw_input() 61
from sys import version_info if version_info.major > 2: input() else:
raw_input() 62
from sys import version_info if version_info.major > 2: input() else:
raw_input() 63
EAFP
Sometimes it's easier to ask for forgiveness than permission 65
- Grace Hopper
try: raw_input('Enter your name: ') except NameError: input('Enter your name:
') 66
try: raw_input('Enter your name: ') except NameError: input('Enter your name:
') 67
Thank you! Any questions? You can talk to me here:
▪ @yanorestes ▪
[email protected]
68