Estilo de código

Código explícito

Una declaración por línea

Mal

print ("uno"); print ("dos")
if x == 1: print("uno")

if comparacion_compleja and otra_comparacion_compleja:
  pass

Bien

print ("uno")
print ("dos")

if x == 1:
  print ("uno")

cond1 = comparacion_compleja
cond2 = otra_comparacion_compleja
if cond1 and cond2:
  pass

Propiedades privadas

Se utiliza un underscore

_variable_privada = "No me toques"

En realidad esto no es diferente de declararla sin el guión bajo. Es una convención entre programadores del lenguaje

Multiple retornos en una función

Intentar usar sólo uno para el regreso si funcinó correctamente

No Recomendado

if algo:
  return algo
elif algo2:
  return algo2
elif error1:
  return error1
else:
  raise Except("error2")

Recomendado

regreso = None
if algo:
  regreso = algo
elif algo2:
  regreso = algo2
elif error1:
  return error1
else:
  raise Except("error2")
return regreso

Se pueden usar varios para casos de errores o se tenga que avisar lo más pronto posible

Crear lista de la misma cosa

Se crea una lista donde cada entrada es el mismo objeto, esto significa que si el elemento es un objeto mutable, como una lista, si se modifica uno entonces se modificaran todos los demás.

No son copias. Es el mismo objeto en cada entrada de la lista

cuatro_nones = [None] * 4
cuatro_listas = [[]] * 4

Crear listas de tamaño N

Se crea una lista donde cada entrada es una copia diferente, así si modificas un objeto mutable o no mutable esto no repercute en los demás.

cuatro_listas = [[] for __ in range(4)]
numeros = [x for x in range(20)]
numeros_impares = [x for x in range(20) if x%2 != 0]