<jupyter_start><jupyter_text>Funciones--<jupyter_code>def saludo():
    print("Hola mundo")
def tres_saludos ():
    for i in range (3):
        saludo()
    
tres_saludos()
def media_1 ():
    media=(2+4)/2
    print("La media es: ", media)
media_1()
#Las funciones admiten parámetros en si llamada

def suma(a,b):
    print(a+b)
    
suma("Hola","Mundo"), suma (3,6), suma([1,34,5],[4,56])
def media_2 (a,b=5):
    media=(a+b)/2
    print("La media es: ", media)
media_2(3)
media_2(4,10)
def saludar (nombre="Mundo", mensaje="Hola"):
    print (mensaje, nombre)
    
saludar()
saludar("Mundo")
saludar(mensaje="Que tal!!")
saludar(nombre="Mundo")
saludar(mensaje="Buen día", nombre="Mundo")

saludar(nombre="Mundo", mensaje="Buen día",)
saludar("Mundo", mensaje="Buen día",)


def media_3 (a,b):
    media=(a+b)/2
    return media  #Te regresa el valor, mismo que puedes almacenar en una variable

media_3(1,2)<jupyter_output><empty_output><jupyter_text>Tarea--asdfgh $x_2 = x^2$ sdfgh$$x_2 = x^2$$ Realizar la operación a+b+c+d<jupyter_code>def suma (a,b,c,d):
    valor=a+b+c+d
    print(valor)

suma(1,2,1,1)<jupyter_output>5<jupyter_text>Realizar la operación $x^2$<jupyter_code>def potencia (x):
    y=x**2
    print(y)

potencia(100)<jupyter_output>10000<jupyter_text>Media<jupyter_code>def media (lista):
    x=0
    for i in lista: #i toma los valores dentro de la lista
        x=x+i
    media=x/len(lista)
    return media

lista=[5,5,5,5,5,5]

media(lista)<jupyter_output><empty_output><jupyter_text>Desviación estándar<jupyter_code>def desviacion (lista):
    x=0
    m=media(lista)
    for i in lista:
        x=x+(i-m)**2
    desv=x/(len(lista)-1)
    desv=desv**(1/2)
    return desv
    
l=[3,4,3,4]

print (desviacion(l))
print (media(l))
#Poner código para importar librería<jupyter_output><empty_output><jupyter_text>Ámbito global y nolocal--<jupyter_code>#Ver foto que le envié a George
def varios (param1, param2, *otros): 
    for val in otros:
        print (val)
varios(1,2)
varios(1,2,3)
varios(1,2,3,4) #a partir de tres, todos los demás datos se almacenan en una tupra

def Nombres(**kwargs): #Con dos asteriscos, recibe diccionarios
    for key in kwargs:
        print(key, kwargs[key])
        
Nombres(nombre="Michel", apellido="Lopez",a=43,val=456, tmp=68)
#Funcion lambda

f=lambda x:x*5
f(2)

#Esto de arriba es equivalente a tener:
def f(x):
    return x*5<jupyter_output><empty_output><jupyter_text>Definir funciones con un número variable de argumentos--<jupyter_code>def varios (param1, param2, *otros):
    print (type(otros))
    for val in otros:
        print(val)

varios (1,2)
varios (1,2,3)
varios (1,2,3,4)

#La variable *otros es una Tupla<jupyter_output><class 'tuple'>
<class 'tuple'>
3
<class 'tuple'>
3
4<jupyter_text>Si queremos asignar valor a una variable en una función, pero no queremos que Python la considere como ¿? debemos declararla en la función como global--<jupyter_code>def function_0 ():
    variable_Global=10
    print("El ámbito de la variable es global, valor ", variable_Global)
    
def function_1 ():
    global variable_Global
    #variable_Global=2
    print("El ámbito de la variable es global, valor ", variable_Global)
    variable_Global=2
    
def function_2 ():
    global variable_Global
    print("También aquí conozco el valor. ", variable_Global)
    variable_Global=3

variable_Global=1
function_0()
function_1()
function_2()
print ("Y aquí también conozco", variable_Global)<jupyter_output>El ámbito de la variable es global, valor  10
El ámbito de la variable es global, valor  1
También aquí conozco el valor.  2
Y aquí también conozco 3<jupyter_text>Argumentos variables clave-valor--*args is used to send a non-keyworded variable lenght argument list to the function**kwargs allows you to pass keyworded variable lenght of arguments to a function<jupyter_code>def Nombres (**kwargs):
    for key in kwargs:
        print (key,kwargs[key])
        
Nombres (nombre="Michel",apellido="Lopez")
def Area(**kwargs):
    Base=kwargs.get("base",2)
    Altura=kwargs.get("altura",5)
    return Base*Altura

print (Area (base=10))
print (Area (altura=20))
print (Area ())
print (Area (base=10,altura=20))<jupyter_output>50
40
10
200<jupyter_text>Todo junto--<jupyter_code>def recorrer_parametros_arbitrarios(parametro_fijo, parametro_fijo2="Mundo",*arbitrarios,**kwords):
    print ("parametro_fijo",parametro_fijo)
    print(parametro_fijo2)
    for argumento in arbitrarios:
        print(argumento)
    
    #Los argumentos tipo clave, se recorren como los diccionarios
    for clave in kwords:
        print ("El valor de",clave,"es",kwords[clave])

recorrer_parametros_arbitrarios("Hola",1,2,3,Nombre="Michel",Apellido="Lopez")<jupyter_output>parametro_fijo Hola
1
2
3
El valor de Nombre es Michel
El valor de Apellido es Lopez
{'fraction_non_alphanumeric': 0.12852990033222592, 'fraction_numerical': 0.029692691029900332, 'mean_word_length': 4.768862275449102, 'pattern_counts': {'":': 0, '<': 38, '<?xml version=': 0, '>': 38, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '10', 'dir': 'jupyter-structured-clean-dedup', 'id': '347608', 'license': 'MIT', 'n_tokens_mistral': 1942, 'n_tokens_neox': 1906, 'n_words': 458, 'path': 'Apuntes de clases/a04_Clase 23 de enero_Funciones.ipynb', 'repo_name': 'AlexRojas06/Trabajos_realizados_en_clase', 'size': '4816'}