#  int, float, str, bool, bytes, list, tuple, dict, set, frozenset, None .

a: int = 3
b: float = 2.4
c: bool = True
d: list = ["A", "B", "C"]
e: dict = {"x": "y"}
f: set = {"a", "b", "c"}
g: tuple = ("name", "age", "job")

print(a,b,c,d,e,f,g)



class Person:
    first_name: str = "John"
    last_name: str = "Does"
    age: int = 31



def my_dummy_function(l: list[float]):
   return sum(l)
  
 
   
from typing import List

def my_dummy_function(vector: List[float]):
   return sum(vector)
   





from typing import Callable

def sum_numbers(x: int, y: int) -> int:
    return x + y

def foo(x: int, y: int, func: Callable) -> int:
    output = func(x, y)
    return output

foo(1, 2, sum_numbers)



def foo(x: int, y: int, func: Callable[[int, int], int]) -> int:
    output = func(x, y)
    return output
    

#https://towardsdatascience.com/12-beginner-concepts-about-type-hints-to-improve-your-python-code-90f1ba0ac49
"""
# type_x , type_y , type_z , type_return 

def add_numbers(x: type_x, y: type_y, z: type_z= 100) -> type_return:
    return x + y + z

print(add_numbers(1,2,3))
"""