Funciones y variables globales en python
Autor
Vanessa ReteguínFunciones
Extracto de código que realiza una tarea específica. Puede devolver una salida predefinida (output) con base en entradas específicas (input).
Para principiantes en la programación, una función puede pensarse como una caja negra a la cual le damos insumos y nos devuelve un nuevo producto. Piensa en un extractor de jugo; le proporcionas fruta (entrada), la muele (función) y obtenemos jugo (salida).
En python una función se define como:
def function_name(input):
# Operations
print(input)
result = 'result'
return result
Aunque no es necesario especificar el tipo de dato de los parámetros, el tipo de dato a retornar, o el de las mismas variables internas, es posible hacerlo de la siguiente forma:
def is_of_legal_age(age: int) -> bool:
if 18 < age:
adult = True
else:
adult = False
return adult
user_age:int
age: int
name: str
height: float
is_human: bool
user_age = int(input("Ingrese su edad: "))
if is_of_legal_age(user_age):
print("Mayor de edad")
else:
print("Menor de edad")
Ingrese su edad: 21
Mayor de edad
Funciones vacías pass
En ocaciones tenemos un programa que involucra varias funciones pero aún no sabemos la lógica exacta de cada una. Para no olvidar a todas las pequeñas tareas que nos falta por hacer, podemos declarar funciones vacías de la siguiente forma:
# TODO: to X thing based on Y parameter and return Z
def to_do():
pass
Argumentos posicionales y de nombre
Cuando queremos ingresar más de un parámetro podemos indicarlos mediante su posición (positional arguments) o su nombre (keyword arguments).
def get_voltage(current: float, resistance: float):
voltage = current / resistance
return voltage
circuit_current = 2 # A
circuit_resisteance = 50 # Ω
voltage = get_voltage(current=circuit_current, resistance=circuit_resisteance)
print(f"{voltage} V")
0.04 V
Variables globales
Ahora, reconocemos que todo aquello que esté identadado en cualquier línea debajo de la función son instrucciones que pertenecen a la misma función. Cualquier variable que declaremos dentro de la función se puede usar exclusivamente dentro de esta función, son variables locales. Es decir, todas las variables están dentro del scope (o dominio) de la función.
Sin embargo, ¿que pasa si hay datos que deben ser utilizados fuera de la función o múltiples veces? Para ello empleamos una variable global. Esta palabra reservada (global) indicará al interpretador que la variable puede utilizase fuera del dominio (scope) de la función; puede utilizarse en todas partes del código. Por ejemplo:
points = 0
def attack_enemy():
global points
print("You've attacked someone")
points += 5
for i in range(0, 3):
attack_enemy()
print(f"Points: {points}")
You've attacked someone
You've attacked someone
You've attacked someone
Points: 15
Otra forma para obtener el mismo comportamiento, podemos pasar las variables como parámetro, modificarlas dentro de la función y luego retornarlas. Personalmente prefiero esta alternativa en lugar de emplear variables globales. Evítese modificar el global scope
def attack_enemy(points):
print("You've attacked someone")
points += 5
return points
points = 0
for i in range(0, 3):
points = attack_enemy(points)
print(f"Points: {points}")
Podemos modificar cualquier tipo de objeto, como por ejemplo una lista:
def add_item_to_vault(player_vault, item):
player_vault.append(item)
vault = ['map', 'telescope', 'cookie']
add_item_to_vault(vault, 'ham')
print(f"Vault: {vault}")
You've attacked someone
You've attacked someone
You've attacked someone
Points: 15