41
Python Sucks! [email protected] David Jones drj11.wordpress.com

Python Sucks! - WordPress.com · Python Sucks! [email protected] David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Python Sucks!

[email protected]

David Jones

drj11.wordpress.com

Page 2: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Python

JavaScript

Java

Fortran

(Common) Lisp

(Standard) ML

Lua

(BBC/Sinclair) BASIC

C

BCPL

Icon

awk

(Bourne) shell

Scheme

Page 3: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Haskell

PHP

C++

Erlang

Groovy

Perl

D

Scala

Ruby

Python 3

Clojure

CLU

Ada

Objective C

Smalltalk

Occam

Forth

Prolog

Page 4: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Python isthe worst

programming languageever

Page 5: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Python isthe worst

programming languageever

exceptfor all the others.

(After W Churchill)

Page 6: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

while True:

try:

type, data = self.chunk()

except ValueError, e:

raise ChunkError(e.args[0])

Page 7: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

sucks! wins!

Python

C

Lisp

Java

awk

Page 8: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Lambda

!

Page 9: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Lambda

Note that functions created with lambda forms cannot contain statements.

Python 2.6.2 documentation:

Page 10: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

contains = {}

for c in 'aeiou':

contains[c] = lambda s: c in s

Bindings: Fail

contains['u']('food') ! False

contains['u']('zuul') ! True

contains['a']('bar') ! False

contains['a']('zuul') ! True

Page 11: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Bindings

c: 'a' lambda

Page 12: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Bindings

c: 'e' lambda

lambda

Page 13: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Bindings

c: 'u' lambda

lambda

lambda

lambda

lambda

Page 14: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Bindings

c: 'a' lambda

lambda

lambda

lambda

lambda

c: 'e'

c: 'i'

c: 'o'

c: 'u'

Page 15: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Bindings: Workaround

def f():

ch=c

return lambda s: ch in s

for c in 'aeiou':

contains[c] = f()

Page 16: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

1

"strings"

lambda:'foo'

object()

import math

class bar(object):

Everything is an object

Page 17: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Creating Objects

in Java/C++:

Class instance = new Class(args)

Page 18: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Creating Objects

in Python:

instance = Class(args)

Page 19: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

def read(self):

def iteridat():

while True:

type, data = self.chunk()

...

...

Page 20: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

GIL, Threading

YOU fill in here

Page 21: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

distutils

Easy Install

setuptoolseggs

PyPI

buildout

virtualenv

Page 22: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Chained Comparisons

assert 0 <= x < n

Page 23: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Chained Comparisons

a < b < c

(a < b) and (b < c)

in Python, same as:

Page 24: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Chained Comparisons

a < b < c

(a < b) < c

in C, same as:

... not helpful!

Page 25: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Chained Comparisons

b < a > c

Page 26: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Bad bad bad!

0 < x in l

Page 27: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Iverson's Convention

x < y

is where

evaluates to

0 or 1

(in Python

spelled False and True)

Page 28: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Arithmetic with Iverson

color_type = 4*alpha +

2*(not greyscale) + 1*colormap

Page 29: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Infinity!

NaNIEEE 754

...and all that

Page 30: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

>>> 9e999

inf

>>> float('inf')

inf

>>> struct.unpack('>f',

'7f800000'.decode('hex'))[0]

inf

To Infinity ...

Page 31: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

>>> struct.unpack('>f',

'7f800001'.decode('hex'))[0]

nan

and Beyond!

Page 32: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Floating Point Printing

>>> 0.1

0.10000000000000001

Page 33: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Python, Divided

3 / 2 ! 1

3.0 / 2 ! 1.5

3 / 2 ! 1.5

3.0 / 2 ! 1.5

Python 2.x

Python 3.x

Page 34: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Division Operators

3.0 // 2 ! 1.0

3.0 / 2 ! 1.5

Page 35: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Lisp, Divided

(floor 3 2) ! 1

(ceiling 3 2) ! 2

(truncate 3 2) ! 1

(truncate -3 2) !!-1

(floor -3 2) !!-2

(round 3 2) ! 2

(round 5 2) ! 2

Page 36: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Python, Fraction

from fractions import Fraction

1/3-1/11!

"

Page 37: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Python, Fraction

>>> 1/3-1/11

0.2424242424242424

>>> _*33

7.9999999999999991

>>> Fraction(1,3)-Fraction(1,11)

Fraction(8, 33)

>>> _*33

Fraction(8, 1)

Page 38: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Python Power!

x**2

x**0.5

Page 39: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Decorators

@someclassdecorator

class foo:

@somemethoddecorator

def bar(self):

pass

Page 40: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Argument List Splicing

zip(*l)

dict(a=1, **d)

Page 41: Python Sucks! - WordPress.com · Python Sucks! drj@ravenbrook.com David Jones drj11.wordpress.com. Python JavaScript Java Fortran (Common) Lisp (Standard) ML Lua (BBC/Sinclair) BASIC

Punctuation in Names

int?(x)

instance?(x, someclass)

l.sort!()