¿Cuál es la necesidad de pasar los argumentos en las funciones de Python si las variables se declaran globalmente?

a = 13
b = 12

def add():
    return a + b

def add2(a, b):    # why to pass a and b?
    return a + b

print(add())   # result 25
print(add2(a, b))    #result 25

¿Por qué necesitamos pasar los argumentos a la función de python si podemos usar los valores/variables sin pasarlos a las funciones?

Answer

En su caso, no es necesario pasar argumentos porque siempre está agregando las mismas dos variables. Pero si quisieras tener una función que pudiera agregar dos variables cualesquiera, ¿cómo sabría la función qué dos variables agregar? En el siguiente ejemplo, tengo tres variables y una función para agregar dos de ellas:

def add():
    return a + b

a = 5
b = 7
c = 10

print(add())  # 12
# No way to add a + c or b + c

El problema es que si quiero agregar ca una de las otras variables, no tengo forma de hacerlo. Podemos definir una función que tome dos argumentos para resolver este problema:

def add(n1, n2):
    return n1 + n2

a = 5
b = 7
c = 10

print(add(a, b))  # 12
print(add(a, c))  # 15
print(add(b, c))  # 17

Entonces, en resumen, solo necesita pasar argumentos a una función si no está seguro de qué variables globales necesitará la función