¿Por que el tipado dinámico es peligroso?

Por que puede que dejemos un error que jamas salga a la luz hasta que sea visible la ejecución del programa.

Como pasar de tipado dinámico a estático en Python:

Esto se logra con static typing.

a : int = 5
print(a)

b: str = 'Hola'
print(b)

c: bool = True
print(c)

#output
5
Hola
True

Como vez se coloca la variable dos puntos luego el tipo y luego el valor que va tomar.

def suma(a: int, b: int) -> int:
	return a + b

print(suma(1,2))
print(suma('1','2'))
#output
3
12

Para las funciones como vez primero se coloca el parámetro : <tipo de valor> luego con una flecha se coloca el tipo de valor que va devolver.

Nota: Esta parte siguiente aplica para python 3.6 a 3.9.

from typing import Dict, List

positives: List[int] = [1,2,3,4,5]

users : Dict[str, int] = {
	'argentina': 1,
	'mexico': 34,
	'colombia': 45,
}

countries: List[Dict[str, str]] = [
	{
		'name': 'Argentina',
		'people': '450000'
	},
	{
		'name': 'Mexico',
		'people': '9000000'
	},
	{
		'name': 'Colombia',
		'people': '99999999999'
	}
]

Este es un ejemplo de como se trabaja las listas y diccionarios con su tipado.

from typing import Tuple

numbers: Tuple[int, float, int] = (1, 0.5, 1)

por ejemplo la declaración de una tupla

from typing import Tuple, Dict, List

CoordinatesType = List[Dict[str, Tuple[int,int]]]

coordinates: CoordinatesType = [
	{
		'coord1': (1, 2),
		'coord2': (3, 5)
	},
	{
		'coord1': (0, 1),
		'coord2': (2, 5)
	},
]

Por ejemplo aquí CoordinateType es una lista que tiene por elementos a diccionarios que toman como llave un string y como valor una tupla.

<aside> 💡 Nota: Aveces no solo la sintaxis es suficiente, para que pueda marcar errores que no detecta los lenguajes dinámicos hasta ejecución, para ello va ser necesario el modulo mypy esto nos permite trabajar con tipos en python y se complementa con el modulo typing de python

</aside>

¿Cuales son las ventajas de usar tipos?