WHOAMI
▸ desenvolvedor na Jusbrasil
▸ contribui com projetos open source como Django, Docker,
OpenStack, pypy, splinter, tsuru
▸ github.com/andrewsmedina
Slide 3
Slide 3 text
PYTFALLS??!!
Slide 4
Slide 4 text
A HIDDEN OR UNSUSPECTED DANGER OR
DIFFICULTY
PITFALL
Slide 5
Slide 5 text
AN UNEXPECTED PROBLEM OR USUALLY
UNPLEASANT SURPRISE
GOTCHA
def append(element, to=[]):
to.append(element)
return to
Slide 46
Slide 46 text
def append(element, to=None):
if to is None:
to = []
to.append(element)
return to
Slide 47
Slide 47 text
def fib(n):
if n <= 2:
data = 1
else:
data = fib(n - 2) + fib(n - 1)
return data
Slide 48
Slide 48 text
def fib(n, cache={}):
if n not in cache:
if n <= 2:
data = 1
else:
data = fib(n - 2) + fib(n - 1)
cache[n] = data
return cache[n]
Slide 49
Slide 49 text
#3
Slide 50
Slide 50 text
def create_multipliers():
return [lambda x : i * x for i in range(5)]
Slide 51
Slide 51 text
for multiplier in create_multipliers():
print multiplier(2)
Slide 52
Slide 52 text
for multiplier in create_multipliers():
print multiplier(2)
?
?
?
?
Slide 53
Slide 53 text
for multiplier in create_multipliers():
print multiplier(2)
? (0)
? (2)
? (4)
? (6)
Slide 54
Slide 54 text
for multiplier in create_multipliers():
print multiplier(2)
8
8
8
8
Slide 55
Slide 55 text
for multiplier in create_multipliers():
print multiplier(2)
8
8
8
8
Slide 56
Slide 56 text
def create_multipliers():
return [lambda x : i * x for i in range(5)]
Slide 57
Slide 57 text
def create_multipliers():
multipliers = []
for i in range(5):
def multiplier(x):
return i * x
multipliers.append(multiplier)
return multipliers
Slide 58
Slide 58 text
def soma(x, y):
return x+y
Slide 59
Slide 59 text
soma = lambda x, y: x+y
Slide 60
Slide 60 text
def soma(x, y): return x+y
Slide 61
Slide 61 text
def create_multipliers():
return [lambda x : i * x for i in range(5)]
Slide 62
Slide 62 text
def create_multipliers():
multipliers = []
for i in range(5):
def multiplier(x):
return i * x
multipliers.append(multiplier)
return multipliers
Slide 63
Slide 63 text
def create_multipliers():
return [lambda x, i=i: i * x for i in range(5)]
Slide 64
Slide 64 text
#4
Slide 65
Slide 65 text
>>> a = 256
>>> b = 256
>>> a is b
True
Slide 66
Slide 66 text
>>> a = 257
>>> b = 257
>>> a is b
???
Slide 67
Slide 67 text
>>> a = 257
>>> b = 257
>>> a is b
False
Slide 68
Slide 68 text
>>> a = 257
>>> b = 257
>>> a is b
False
Slide 69
Slide 69 text
>>> a = 256
>>> b = 256
>>> a is b
True
Slide 70
Slide 70 text
>>> help(id)
Slide 71
Slide 71 text
>>> help(id)
id(obj, /)
Return the identity of an object.
Slide 72
Slide 72 text
>>> a = 256
>>> id(a)
4307458704
>>> b = 256
>>> id(b)
4307458704
Slide 73
Slide 73 text
>>> a = 257
>>> id(257)
4312868592
>>> b = 257
>>> id(b)
4311130416
Slide 74
Slide 74 text
#5
Slide 75
Slide 75 text
# random.py
import random
random.randrange(100)
Slide 76
Slide 76 text
$ python random.py
Traceback (most recent call last):
File "random.py", line 1, in
import random
File "random.py", line 3, in
print(random.randrange(100))
AttributeError: 'module' object has no attribute
'randrange'