PEP 498: The Monologue

A presentation at PyCon Canada 2017 in November 2017 in Montreal, QC, Canada by Mariatta

Slide 1

Slide 1

MARIATTA WIJAYA @mariatta PYCON CANADA 2017 PEP 498: THE MONOLOGUE #PEPtalk

Slide 2

Slide 2

! You cool people! Who are you? @mariatta PYCON CANADA 2017 #PEPtalk

Slide 3

Slide 3

Are you … … new to Python? @mariatta PYCON CANADA 2017 #PEPtalk

Slide 4

Slide 4

Are you … … only aware of one PEP? @mariatta PYCON CANADA 2017 #PEPtalk

Slide 5

Slide 5

Are you … … using Python < 3.6? @mariatta PYCON CANADA 2017 #PEPtalk

Slide 6

Slide 6

Who am I? @mariatta PYCON CANADA 2017 #PEPtalk

Slide 7

Slide 7

Who am I? @mariatta PYCON CANADA 2017 #PEPtalk

Slide 8

Slide 8

Who am I? @mariatta @mariatta PYCON CANADA 2017 #PEPtalk

Slide 9

Slide 9

Who am I? @mariatta @mariatta PYCON CANADA 2017 #PEPtalk

Slide 10

Slide 10

Who am I? @mariatta Software Engineer @mariatta PYCON CANADA 2017 #PEPtalk

Slide 11

Slide 11

Who am I? @mariatta Software Engineer Python Core Developer @mariatta PYCON CANADA 2017 #PEPtalk

Slide 12

Slide 12

What’s a PEP? @mariatta PYCON CANADA 2017 #PEPtalk

Slide 13

Slide 13

P ython E nhancement P roposal @mariatta PYCON CANADA 2017 #PEPtalk

Slide 14

Slide 14

PEP 1 PEP Purpose and Guideline https://www.python.org/dev/peps/pep-0001 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 15

Slide 15

"

pitch to python-ideas @mariatta PYCON CANADA 2017 #PEPtalk

Slide 16

Slide 16

draft a PEP o ffi cial template: PEP 12 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 17

Slide 17

$

BDFL Pronouncement @mariatta PYCON CANADA 2017 #PEPtalk

Slide 18

Slide 18

$

BDFL Pronouncement % @mariatta PYCON CANADA 2017 #PEPtalk

Slide 19

Slide 19

$

BDFL Pronouncement % & @mariatta PYCON CANADA 2017 #PEPtalk

Slide 20

Slide 20

450 PEPs today 88 rejected @mariatta PYCON CANADA 2017 #PEPtalk

Slide 21

Slide 21

PEP 498 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 22

Slide 22

Jul 20 01:12:31 CEST 2015 From: Mike Miller Subject: [python-ideas] Briefer string format https://mail.python.org/pipermail/python-ideas/2015-July/034657.html @mariatta PYCON CANADA 2017 #PEPtalk

Slide 23

Slide 23

Jul 20 01:12:31 CEST 2015 H a v e l o n g w i s h e d p y t h o n c o u l d f o r m a t s t r i n g s e a s i l y l i k e b a s h o r p e r l d o … a n d t h e n i t h i t m e From: Mike Miller Subject: [python-ideas] Briefer string format https://mail.python.org/pipermail/python-ideas/2015-July/034657.html @mariatta PYCON CANADA 2017 #PEPtalk

Slide 24

Slide 24

Jul 20 01:12:31 CEST 2015 H a v e l o n g w i s h e d p y t h o n c o u l d f o r m a t s t r i n g s e a s i l y l i k e b a s h o r p e r l d o … a n d t h e n i t h i t m e From: Mike Miller Subject: [python-ideas] Briefer string format c s s t e x t +

f ' { n l } { s e l e c t o r } { s p a c e } { { { n l } ' https://mail.python.org/pipermail/python-ideas/2015-July/034657.html @mariatta PYCON CANADA 2017 #PEPtalk

Slide 25

Slide 25

Jul 20 01:12:31 CEST 2015 H a v e l o n g w i s h e d p y t h o n c o u l d f o r m a t s t r i n g s e a s i l y l i k e b a s h o r p e r l d o … a n d t h e n i t h i t m e From: Mike Miller Subject: [python-ideas] Briefer string format c s s t e x t +

f ' { n l } { s e l e c t o r } { s p a c e } { { { n l } ' I ' v e s e e n o t h e r s m a k e s i m i l a r s u g g e s t i o n s , b u t t o m y k n o w l e d g e t h e y d i d n ’ t i n c l u d e t h i s p l e a s i n g b r e v i t y a s p e c t . https://mail.python.org/pipermail/python-ideas/2015-July/034657.html @mariatta PYCON CANADA 2017 #PEPtalk

Slide 26

Slide 26

Jul 20 01:12:31 CEST 2015 From: Eric V. Smith Subject: Re: [python-ideas] Briefer string format https://mail.python.org/pipermail/python-ideas/2015-July/034658.html Jul 20 01:27:42 CEST @mariatta PYCON CANADA 2017 #PEPtalk

Slide 27

Slide 27

Jul 20 01:12:31 CEST 2015 W h a t w o u l d t h i s d o ? From: Eric V. Smith Subject: Re: [python-ideas] Briefer string format https://mail.python.org/pipermail/python-ideas/2015-July/034658.html Jul 20 01:27:42 CEST @mariatta PYCON CANADA 2017 #PEPtalk

Slide 28

Slide 28

Jul 20 01:12:31 CEST 2015 From: C. A. Subject: Re: [python-ideas] Briefer string format https://mail.python.org/pipermail/python-ideas/2015-July/034660.html Jul 20 01:27:42 CEST Jul 20 01:44:09 CEST @mariatta PYCON CANADA 2017 #PEPtalk

Slide 29

Slide 29

I ’ m

1 o n t h e s p e c ific i d e a , t h o u g h d efin i t e l y s y m p a t h e t i c t o t h e b r o a d e r c o n c e p t o f s i m p l ifie d f o r m a t t i n g o f s t r i n g s . Jul 20 01:12:31 CEST 2015 From: C. A. Subject: Re: [python-ideas] Briefer string format https://mail.python.org/pipermail/python-ideas/2015-July/034660.html Jul 20 01:27:42 CEST Jul 20 01:44:09 CEST @mariatta PYCON CANADA 2017 #PEPtalk

Slide 30

Slide 30

Jul 20 01:12:31 CEST 2015 From: S. D. Subject: Re: [python-ideas] Briefer string format https://mail.python.org/pipermail/python-ideas/2015-July/034669.html Jul 20 01:27:42 CEST @mariatta PYCON CANADA 2017 #PEPtalk Jul 20 02:43:29 CEST Jul 20 01:44:09 CEST

Slide 31

Slide 31

I t ’ s s y n t a c t i c s u g a r f o r a s i m p l e f u n c t i o n c a l l w i t h p e r f e c t l y w e l l d efin e d s e m a n t i c s

d o n ’ t e v e n h a v e t o m o d i f y t h e s t r i n g l i t e r a l . I ’ m + 1 . Jul 20 01:12:31 CEST 2015 From: S. D. Subject: Re: [python-ideas] Briefer string format https://mail.python.org/pipermail/python-ideas/2015-July/034669.html Jul 20 01:27:42 CEST @mariatta PYCON CANADA 2017 #PEPtalk Jul 20 02:43:29 CEST Jul 20 01:44:09 CEST

Slide 32

Slide 32

that escalated quickly @mariatta PYCON CANADA 2017 #PEPtalk

Slide 33

Slide 33

Jul 20 01:12:31 CEST 2015 From: Guido van Rossum Subject: Re: [python-ideas] Briefer string format https://mail.python.org/pipermail/python-ideas/2015-July/034729.html Jul 20 01:27:42 CEST Jul 20 01:44:09 CEST Jul 20 02:43:29 CEST Jul 21 08:05:15 CEST @mariatta PYCON CANADA 2017 #PEPtalk

Slide 34

Slide 34

T h a n k s , E r i c ! Y o u ’ r e a d d r e s s i n g a l l m y c o n c e r n s a n d y o u ’ r e g o i n g e x a c t l y w h e r e I w a n t e d t h i s t o g o . I h o p e t h a t y o u w i l lfin d t h e t i m e t o w r i t e u p a P E P ; Jul 20 01:12:31 CEST 2015 From: Guido van Rossum Subject: Re: [python-ideas] Briefer string format https://mail.python.org/pipermail/python-ideas/2015-July/034729.html Jul 20 01:27:42 CEST Jul 20 01:44:09 CEST Jul 20 02:43:29 CEST Jul 21 08:05:15 CEST @mariatta PYCON CANADA 2017 #PEPtalk

Slide 35

Slide 35

By: Eric V. Smith PEP 498: Literal String Formatting August 7th, 2015 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 36

Slide 36

By: Eric V. Smith PEP 498: Literal String Interpolation August 7th, 2015 August 30th, 2015 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 37

Slide 37

ready for pronouncement PEP 498: Literal String Interpolation 1 August 7th, 2015 August 30th, 2015 September 5th, 2015 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 38

Slide 38

PEP 498: Literal String Interpolation August 7th, 2015 August 30th, 2015 September 5th, 2015 September 7th, 2015 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 39

Slide 39

“The existing ways of formatting are either error prone , inflexible , or cumbersome .” RATIONALE @mariatta PYCON CANADA 2017 #PEPtalk

Slide 40

Slide 40

name = "Bart"

print( "Hello, %s ." % name) Hello, Bart. @mariatta PYCON CANADA 2017 #PEPtalk

Slide 41

Slide 41

name = "Bart"

age =

10

print( "Hello,

%s . You’re %s ."

% name, age ) Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

TypeError: not enough arguments for format string @mariatta PYCON CANADA 2017 #PEPtalk

Slide 42

Slide 42

name = "Bart"

age = 10

print( "Hello, %s . You’re %s ." %

( name, age ) ) Hello, Bart. You're 10. @mariatta PYCON CANADA 2017 #PEPtalk

Slide 43

Slide 43

PEP 3101: str.format https://www.python.org/dev/peps/pep-31 01 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 44

Slide 44

name = "Bart"

age = 10

print( "Hello,

{name} . You’re {age} . " .format( name =name, age =age)) Hello, Bart. You're 10.

@mariatta PYCON CANADA 2017 #PEPtalk

Slide 45

Slide 45

PEP 498: f-string https://www.python.org/dev/peps/pep- 0498 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 46

Slide 46

name = "Bart"

age = 10

print( "Hello,

{name} . You’re {age} . " .format( name =name, age =age)) @mariatta PYCON CANADA 2017 #PEPtalk

Slide 47

Slide 47

name = "Bart"

age = 10

print( "Hello,

{name} . You’re {age} . " ) @mariatta PYCON CANADA 2017 #PEPtalk

Slide 48

Slide 48

name = "Bart"

age = 10

print( f "Hello, {name} . You’re

{age} ." ) @mariatta PYCON CANADA 2017 #PEPtalk

Slide 49

Slide 49

name = "Bart"

age = 10

print( f "Hello, {name} . You’re

{age} ." ) @mariatta PYCON CANADA 2017 #PEPtalk Hello, Bart. You're 10.

Slide 50

Slide 50

recap @mariatta PYCON CANADA 2017 #PEPtalk

Slide 51

Slide 51

"Hello, %s . You’re %s . " % (name, age ) @mariatta PYCON CANADA 2017 #PEPtalk

Slide 52

Slide 52

"Hello, %s . You’re %s . " % (name, age ) "Hello, {name} . You’re {age} ." .format( name= name, age= age) @mariatta PYCON CANADA 2017 #PEPtalk

Slide 53

Slide 53

"Hello, %s . You’re %s . " % (name, age ) "Hello, {name} . You’re {age} ." .format( name= name, age= age) f " Hello, {name} . You’re {age} . "

@mariatta PYCON CANADA 2017 #PEPtalk

Slide 54

Slide 54

f " Hello, {name} . You’re {age} . "

Expression @mariatta PYCON CANADA 2017 #PEPtalk

Slide 55

Slide 55

f " Hello, {name} . You’re {age} . "

Literal @mariatta PYCON CANADA 2017 #PEPtalk

Slide 56

Slide 56

f " Hello, world. "

f-string @mariatta PYCON CANADA 2017 #PEPtalk

Slide 57

Slide 57

f "..."

✅ F' ...'

✅ f """..."""

✅ @mariatta PYCON CANADA 2017 #PEPtalk

Slide 58

Slide 58

r + f = fr " … " Raw f-strings @mariatta PYCON CANADA 2017 #PEPtalk

Slide 59

Slide 59

print( "The smiley face emoji is \U0001f600" ) @mariatta PYCON CANADA 2017 #PEPtalk

Slide 60

Slide 60

print( "The smiley face emoji is \U0001f600" ) The smiley face emoji is ( @mariatta PYCON CANADA 2017 #PEPtalk

Slide 61

Slide 61

print( "The smiley face emoji is \U0001f600" ) The smiley face emoji is (

print( r "The smiley face unicode is \U0001f600" ) @mariatta PYCON CANADA 2017 #PEPtalk

Slide 62

Slide 62

print( "The smiley face emoji is \U0001f600" ) The smiley face emoji is (

print( r "The smiley face unicode is \U0001f600" ) The smiley face unicode is \U0001f600 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 63

Slide 63

code = "emoji "

print( f"The smiley face {code} is \U0001f600" ) @mariatta PYCON CANADA 2017 #PEPtalk

Slide 64

Slide 64

code = "emoji "

print( f"The smiley face {code} is \U0001f600" ) The smiley face emoji is ( @mariatta PYCON CANADA 2017 #PEPtalk

Slide 65

Slide 65

code = "emoji "

print( f"The smiley face {code} is \U0001f600" ) The smiley face emoji is (

code = "unicode "

print( f r "The smiley face {code} is \U0001f600" ) @mariatta PYCON CANADA 2017 #PEPtalk

Slide 66

Slide 66

code = "emoji "

print( f"The smiley face {code} is \U0001f600" ) The smiley face emoji is (

code = "unicode "

print( f r "The smiley face {code} is \U0001f600" ) The smiley face unicode is \U0001f600 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 67

Slide 67

rF """..."""

✅ fr "..."

✅ RF "..."

✅ PYCON CANADA 2017 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 68

Slide 68

fb "..."

❌ uf "..."

❌ @mariatta PYCON CANADA 2017 #PEPtalk

Slide 69

Slide 69

name = "bart simpson"

print( f"Hi {name.upper()} !” ) Hi BART SIMPSON!

@mariatta PYCON CANADA 2017 #PEPtalk

Slide 70

Slide 70

def how_many_tacos(people ): ...      return people * 3

...

people = 5

print( f"Order {how_many_tacos(people)} tacos for meetup!" ) Order 15 tacos for meetup!

@mariatta PYCON CANADA 2017 #PEPtalk

Slide 71

Slide 71

pi = 3.14159265

print( "pi 3 decimal places %.3f " % pi )

3.142

print( f"pi 3 decimal places {pi:.3f} " )

3.142

@mariatta PYCON CANADA 2017 #PEPtalk

Slide 72

Slide 72

number =

1024

print( f"hex: {number:#0x} " )

hex: 0x400

print( f"binary: {number:#0b} " )

binary: 0b10000000000

print( f"octal: {number:#0o} " )

octal: 0o2000

@mariatta PYCON CANADA 2017 #PEPtalk

Slide 73

Slide 73

pycon_ca = datetime ( year= 2017, month= 11, day= 19)

print( f" {pycon_ca:%b %d, %Y} " )

Nov 19, 2017

print( f" {name:>20} " )

            Bart

print( f" {age:=+5d} " )

  • 10

@mariatta PYCON CANADA 2017 #PEPtalk

Slide 74

Slide 74

Not in Docstrings

def spam(): ...
f " doing stuff "

...

spam. doc is None True bpo-28739 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 75

Slide 75

Multi-line S trings? bpo-29668

name = "Bart"

prize = 50

tomorrow =

today() + timedelta( days= 1 )

message = ( f "Dear {name} ,"

...             "You can win {prize:.2f} $"

...             "Make a purchase before {tomorrow:%Y-%b-%d} " )

@mariatta PYCON CANADA 2017 #PEPtalk

Slide 76

Slide 76

Multi-line S trings

message = ( f "Dear {name} ,"

...             f "You can win {prize:.2f} $"

...             f "Make a purchase before {tomorrow}:%Y-%b-%d " )

@mariatta PYCON CANADA 2017 #PEPtalk bpo-29668

Slide 77

Slide 77

IDLE Needs Syntax Highlighting bpo-29287 • Needs separate colorization to make the expression distinct from the rest of the string. • Needs close-brace matching. • Would be desirable to have autocompletion as well. @mariatta PYCON CANADA 2017 #PEPtalk

Slide 78

Slide 78

,

Documentation … ? Python 3.6.2 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 79

Slide 79

,

Documentation … ?

Python 3.6.3 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 80

Slide 80

,

Documentation https://docs.python.org/3/reference/lexical_analysis.html#formatted-string-literals ⭐ / Formatted String Literal 0 docs.python.org

glossary > f-string @mariatta PYCON CANADA 2017 #PEPtalk

Slide 81

Slide 81

timeit @mariatta PYCON CANADA 2017 #PEPtalk

Slide 82

Slide 82

$ python3 -mtimeit -s 'a= 2 ' "'%s' % a " 10000000 loops, best of 3:

0.197

usec per loop @mariatta PYCON CANADA 2017 #PEPtalk

Slide 83

Slide 83

$ python3 -mtimeit -s 'a=2' "'%s' % a" 10000000 loops, best of 3: 0.197

usec per loop $ python3 -mtimeit -s 'a=2' '"{}".format(a)' 1000000 loops, best of 3: 0.341

usec per loop @mariatta PYCON CANADA 2017 #PEPtalk

Slide 84

Slide 84

$ python3 -mtimeit -s 'a=2' "'%s' % a" 10000000 loops, best of 3: 0.197

usec per loop $ python3 -mtimeit -s 'a=2' '"{}".format(a)' 1000000 loops, best of 3: 0.341

usec per loop $ python3 -mtimeit -s 'a=2' 'f" {a} "' 10000000 loops, best of 3: 0.105 usec per loop @mariatta PYCON CANADA 2017 #PEPtalk

Slide 85

Slide 85

$ python3 -mtimeit -s 'a=2' "'%s' % a" 10000000 loops, best of 3:

0.197

usec per loop $ python3 -mtimeit -s 'a=2' '"{}".format(a)' 1000000 loops, best of 3: 0.341

usec per loop $ python3 -mtimeit -s 'a=2' ' f" {a} " ' 10000000 loops, best of 3:

0.105 usec per loop @mariatta PYCON CANADA 2017 #PEPtalk

Slide 86

Slide 86

PEP 498 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 87

Slide 87

f-strings @mariatta PYCON CANADA 2017 #PEPtalk

Slide 88

Slide 88

Python 3.6 download at www.python.org @mariatta PYCON CANADA 2017 #PEPtalk

Slide 89

Slide 89

Python 3.6 download at www.python.org @mariatta PYCON CANADA 2017 #PEPtalk

Slide 90

Slide 90

2

bonus! @mariatta PYCON CANADA 2017 #PEPtalk

Slide 91

Slide 91

16 PEPs included @mariatta PYCON CANADA 2017 #PEPtalk

Slide 92

Slide 92

16 PEPs included PEP 468

PEP 487

PEP 495

PEP 498 PEP 506

PEP 509

PEP 515

PEP 519 PEP 520

PEP 523

PEP 524

PEP 525 PEP 526

PEP 528

PEP 529

PEP 530 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 93

Slide 93

16 PEPs included PEP 468

PEP 487

PEP 495

PEP 498 PEP 506

PEP 509

PEP 515

PEP 519 PEP 520

PEP 523

PEP 524

PEP 525 PEP 526

PEP 528

PEP 529

PEP 530 @mariatta PYCON CANADA 2017 #PEPtalk

Slide 94

Slide 94

16 PEPs included PEP 468

PEP 487

PEP 495

PEP 498 PEP 506

PEP 509

PEP 515

PEP 519 PEP 520

PEP 523

PEP 524

PEP 525 PEP 526

PEP 528

PEP 529

PEP 530 @mariatta PYCON CANADA 2017 #PEPtalk 17

Slide 95

Slide 95

16 PEPs included PEP 468

PEP 487

PEP 495

PEP 498 PEP 506

PEP 509

PEP 515

PEP 519 PEP 520

PEP 523

PEP 524

PEP 525 PEP 526

PEP 528

PEP 529

PEP 530 @mariatta PYCON CANADA 2017 #PEPtalk 17 PEP 628 : add math.tau

Slide 96

Slide 96

Thank you! file issues at bugs.python.org Mariatta Wijaya | mariatta@python.org

@mariatta PYCON CANADA 2017 #PEPtalk