Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Python 2 or Python 3? - (Finally) Understanding...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
yyyyyyyan
October 21, 2018
Programming
190
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Python 2 or Python 3? - (Finally) Understanding the differences between the two main versions of the language
yyyyyyyan
October 21, 2018
Transcript
68 slides
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
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
110
[PyCon APAC 2022] Writing secure code in Python
yyyyyyyan
1
260
Writing secure code in Python
yyyyyyyan
1
350
Escrevendo códigos seguros em Python
yyyyyyyan
2
400
Entendendo sockets no Python criando um bot de IRC
yyyyyyyan
1
450
Python 2 ou Python 3?
yyyyyyyan
1
170
Criando um malware com Python
yyyyyyyan
3
5.7k
Creating a malware using Python
yyyyyyyan
1
580
Other Decks in Programming
See All in Programming
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
350
Modernizing iOS Apps
seyfoyun
0
150
LLM 101
dalinaum
0
480
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
660
プロジェクトコードをキレイキレイしよう!暗黙的な参照を読み解く静的解析
ostk0069
0
210
AI Augmentation Techniques with Liberty
ivargrimstad
1
460
PyConTW 2026 - AI Coding 不只是工具升級, 區域醫院醫療資訊系統協作開發與資訊團隊轉型實踐
cclai999
0
250
そのデザイントークン、Flutterでも同じ見た目になりますか?
nakamizu
0
340
FactoryBotをやめればRSpecは速くなるのか?
yuta_onishi_97
0
1.7k
全ての永続トークンを、生まれる前に消し去りたい!
sylph01
3
1.7k
作れるエンジニアから、価値を届けるエンジニアへ
ryunakayama
1
280
Railsバージョンを4倍にした話
optim
0
1k
Featured
See All Featured
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
380
[Rails World 2026] Durable orchestration on Rails: from continuation to workflow
palkan
4
1.2k
Designing for Performance
lara
612
70k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
470
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
670
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.7k
What's in a price? How to price your products and services
michaelherold
247
13k
A better future with KSS
kneath
240
18k
How to build a perfect <img>
jonoalderson
1
6.2k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
370
Everyday Curiosity
cassininazir
0
400
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
990