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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
yyyyyyyan
October 21, 2018
Programming
180
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
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
91
[PyCon APAC 2022] Writing secure code in Python
yyyyyyyan
1
230
Writing secure code in Python
yyyyyyyan
1
320
Escrevendo códigos seguros em Python
yyyyyyyan
2
400
Entendendo sockets no Python criando um bot de IRC
yyyyyyyan
1
440
Python 2 ou Python 3?
yyyyyyyan
1
160
Criando um malware com Python
yyyyyyyan
3
5.7k
Creating a malware using Python
yyyyyyyan
1
550
Other Decks in Programming
See All in Programming
AI時代のPHPer生存戦略 ~「言語、もうなんでもよくない?」に本気で向き合う~
vivion
0
210
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
440
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
140
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
280
生成AI導入の「期待外れ」を乗り越える ー 開発フロー改革が目指す、真の組織変革
starfish719
0
2.8k
Claude Team Plan導入・ガイド
tk3fftk
0
240
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
200
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
310
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
130
【やさしく解説 設計編 #0】DDDのコード、読めるのに分からない人へ
panda728
PRO
2
290
継続モナドとリアクティブプログラミング
yukikurage
3
670
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
3
1.3k
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
22k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
670
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
450
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
450
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
GitHub's CSS Performance
jonrohan
1033
470k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
420
Paper Plane
katiecoart
PRO
2
52k
Navigating Weather and Climate Data
rabernat
0
430
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
400
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