Fundamentos Phyton
Fundamentos Phyton
Fundamentos Phyton
---
# Consideraciones:
Este material presenta cambios dirigidos hacia textos orientados a la versión 3.0 de Python, para lo
cual se han incluido nuevos ejemplos y se proponen ejercicios para validar los conocimientos de
los estudiantes orientados al propósito del curso de _Introducción a la Programación para
Analítica_ de la Universidad del Valle.
# Hola, Python!
* Tipado dinámico
* Fuertemente tipado
* Multiplataforma
Principales Ventajas:
* Es de código abierto
* Es fácil de aprender gracias a que su sintaxis es bastante legible para los humanos
* Es un lenguaje maduro
* Esta mantenido por una gran comunidad de desarrolladores y hay multitud de recursos para su
aprendizaje
# Uso de Comentarios:
> Antes de discutir cómo escribir programas con Python, es importante comprender la sintaxis que
le permite agregar comentarios a su código. Dado que el código de la computadora puede ser
difícil de entender, los comentarios son útiles para ayudar a escribir el significado y el propósito de
su código.
En Python, el texto se marca como comentario poniéndolo después del símbolo `#`. Todo, desde el
`#` hasta el final de la línea, es un comentario y no será tenido en cuenta por el interpretador de
Python. Ejemplo:
# Puedes ejecutar esta celda presionando las teclas Shift+Enter y las líneas comentadas serán
ignoradas...
# Definición de Variables
> Dado que los programas en computadora implican trabajar con mucha información, se necesita
una forma de almacenar y consultar esa información. Esto se logra con **variables**:
> - En Python, puede pensar en ellas como en "cajas" que se referencian con "etiquetas" o
"identificadores" para almacenar datos. Después de colocar los datos en una "caja", puede hacer
referencia a esos datos por la "etiqueta" definida.
> - Los nombres de variables pueden contener cualquier combinación de letras, números, puntos o
guines bajos
>
>_Importante:_ Los nombres de las variables distinguen entre mayúsculas y minúsculas. Es una
buena práctica hacer que los nombres de las variables sean informativos sobre los datos que
contienen.
nombre = "Robinson"
print(nombre)
x=9
y = x*2
print(x)
print(y)
x = 4.5
print(x)
x5 = 9
preciocantidad = 8
lenguaje = 'Python'
x=2
x += 3.14
print(x)
# Tipos Básicos
>
>
>
> * **Listas**: Colección de objetos, secuencia ordenada (distintos tipos). `[3, "manzana", 4,
True]`.
> * **Tuplas**: Colección de objetos, secuencia ordenada (distintos tipos). `(3, "manzana", 4,
True)`.
> * **Diccionarios**: Colecciones de objetos con una clave asociada. Por ejemplo: `{"pi":3.1416,
"e":2.718}`.
>
>
>
|----|----|
>
>|Ejemplo| Tipo de Dato|
|---|---|
|x = 20|int|
|x = 20.5| float|
|x = 1j| complex |
|x = range(6)| range|
|x = True| bool|
pass
pass
# Números
> |Operador|Nombre|Descripción|
|---|---|---|
>
Es importante tener presente el orden en que se realizan las operaciones en Python para evitar
errores a la hora de implementar programas:
>
>|Orden|Operador|
|---|---|
# Espacio para ejemplos con operadores para Números (int, float, complex)
x=5
y=7
z = y%x
print(z)
w = x ** 2
print(w)
g = 10//3
print(g)
l = None
print(l)
print(type(l))
print(3+4*5)
print( (3+4)*5 )
print( 10/2*3 )
print( 3+4+2*2+4+5*7+9/3 )
# Esto sucede porque no hay una instrucción que permita ver o 'imprimir' los valores contenidos
en las variables.
---
# Booleanos
> `True` (cierto) y `False` (falso). Estos valores son especialmente importantes para las expresiones
condicionales y los bucles, como veremos más adelante.
>
> |Operador|Descripción|Ejemplo|
|---|---|---|
>
>
|---|---|---|---|---|
>
>
|---|---|---|
|<= |¿es `a` menor o igual que `b`?| `r= (5<=5) # r es True`|
|>= |¿es `a` mayor o igual que `b`?| `r= (5>=3) # r es True`|
l = True
c = True
d = not l and c
print(d)
#d = l or c
#print(d)
P1 = False
P2 = False
P3 = int(P1) + int(P2)
P4 = (P3==1)
print(P4)
x=9
y=3
z = (x!=y)
w = (x>=y)
print(z)
print(w)
pass
# Ejemplos del uso de operadores lógicos y tablas de verdad (and, or, not)
pass
pass
> ## Operadores a Nivel de Bit (o Elemento a Elemento)
> Estos operadores pueden ser utilizados a nivel de bit para comparar lógicamente ("bit a bit") dos
números. Por ejemplo, si veis una operación como 3 & 2, lo que estas viendo es un `and` bit a bit
entre los números binarios 11 y 10 (las representaciones en binario de 3 y 2).
>
> Sin embargo, en este curso los utilizaremos principalmente para realizar operaciones lógicas
(`and, or, xor`) similares a las que vimos arriba para encontrar el valor de verdad de una expresión
o variable booleana. Pero adicionalmente, nos permitirán operar arreglos con valores booleanos
`True` o `False` "elemento a elemento" (que veremos en detalle más adelante en el curso).
>
> |Operador|Descripción|Ejemplo|
|---|---|---|
pass
P1 = False
P2 = False
print(Vivo)
# Este ejemplo lo pongo simplemente para mostrar las operaciones sobre arreglos
# "elemento a elemento" que retomaremos más adelante en el curso. Por ahora sólo
import numpy as np
print(c)
---
# Pregunta en Socrative...
<!--
a)10
b)11
c)10.3
d)11.3
e)6
-->
<!--
x = True
y = False
z = (5>3)
w = (x or y) and z
a)True
b)False
-->
---
# Cadenas
> Las cadenas `str` no son más que texto encerrado entre comillas simples (\'cadena\'), dobles
("cadena"), o triples ("""cadena""").
>
>
> * ¿`c1` sucede a `c2`?: `c1 > c2` (también con `>=`)
> * ¿`c1` antecede a `c2`?: `c1 < c2` (también con `<=`)
print(x)
y = """¿Hola amigos
como
están?"""
print(y)
edad = 37
print(cadena)
print(texto2)
edad = 37
nombre = "Robinson"
texto2 = "Hola, tengo {0} años. Repito, tengo {0} años y me llamo {1} y vivo en {2}
".format(edad,nombre,direccion)
print(texto2)
x = "Python"
y = x *3
print(y)
y = "Hola, tengo 37 años. Repito, tengo 37 años y me llamo Robinson y vivo en Calle 12B # 1 1 "
x = "37" not in y
print(x)
x = "Hola"
y = "hola"
z = (x==y)
print(z)
a = "a"
b = "A"
c = a>b
print(c)
pass
pass
pass
pass
# Ejemplo de concatenación
pass
# Ejemplo de repetición
pass
pass
> ## Slicing
> Cada carácter tiene asociado un índice que permite acceder a él:
>
>|Cadena|P|y|t|h|o|n|
|----|---|---|---|---|---|---|
|Indice positivo|0|1|2|3|4|5|
|Indice negativo|-6|-5|-4|-3|-2|-1|
>
>
>También se pueden utilizar índices negativos para recorrer la cadena del final al principio.
t = "Python"
print(t[0])
print(t[2])
print(t[-1])
print(t[0:3])
print(t[2:])
print(t[3:20])
print(t[3:20:2])
print(t[::-1])
>
> * `c.upper( )` : Devuelve la cadena con los mismos caracteres que la cadena `c` pero en
mayúsculas.
> * `c.lower( )` : Devuelve la cadena con los mismos caracteres que la cadena `c` pero en
minúsculas.
> * `c.title( )` : Devuelve la cadena con los mismos caracteres que la cadena `c` con el primer
carácter en mayúsculas y el resto en minúsculas.
> * `c.split(delimitador)` : Devuelve la lista formada por las subcadenas que resultan de partir la
cadena `c` usando como `delimitador` la cadena delimitador. Si no se especifica el delimitador
utiliza por defecto el espacio en blanco.
> * `c.count( str )` : Cuenta la ocurrencia del string `str` dentro de la cadena `c`.
> * `c.find( str )` : Busca dentro del string `c` la letra o palabra `str` y retorna el índice desde donde
la puedes encontrar.
> * `c.replace( old, new)` : Reemplaza un string `old` por otro `new` dentro del string `c`.
> * `c.format(valores)`: Devuelve la cadena `c` tras sustituir los valores de la secuencia valores en
los marcadores de posición de `c`. Los marcadores de posición se indican mediante llaves`{}` en la
cadena `c`.
>
>
>
>
y = x.title()
print(y)
y = x.split(" ")
print(y)
y = x.count(" ")
print(y)
y = x.find("es")
print(y)
print(x[13:15])
y = x.replace("python","R")
print(y)
x = "Hola "
y = len(x)
print(y)
---
# Pregunta en Socrative...
<!--
x = "Bienvenidos"
print(x[3::2])
a)ineio
b)neio
c)ineios
d)neios
e)Bevnds
-->
<!--
x = "Hola"
y = x * len( x.upper() )
a) "HolaHolaHolaHola"
e) "HOLA4"
-->
---
> El lenguaje Python y su ecosistema para para ciencia de datos están desarrollados pensando en
el usuario. Cada objeto continen una referencia a un string que se conoce como **docstring** y en
la mayoría de casos contiene información resumida del objeto y cómo utilizarlo. También es
posible acceder al docstring utilizando la función `help`
>
> Es posible acceder a las funciones disponibles de algunos objetos utilizando la notación punto "."
y presionando
la tecla "tabulador". Esto se denomina TAB COMPLETION y también funciona con variables u
objetos definidos dentro del script.
pass
> Las siguientes funciones convierten un dato de un tipo en otro, siempre y cuando la conversión
sea posible:
>
#x=int("9")
#type(x)
y = bool("hola")
print(y)
print(type(y))
# Listas
>
> Se construyen poniendo los elementos entre corchetes `[ ]` separados por comas.
>
> * Al igual que los strings, se pueden acceder los elementos con índices (positivos o negativos)
> * Al igual que los strings, también se puede aplicar la operación **slicing**
l = ["hola", 1, 5, 7, True]
print(type(l))
print(l[0])
print(l[1])
y = not l[4]
print(y)
print(l[1:3])
print(l[-1])
print(l[::-1])
print(l[2:7:2])
l =[ [1,2,3,"a"],[6,True,4,3], "hola"]
print(l[0][3])
print(l[1][1])
# Ejemplos de listas y acceso con índices
pass
pass
pass
l = list( range(1,20) )
print(l)
l[2] = -9
print(l)
l[4] = [-2,-3,-6]
print(l)
print(l[4][1])
>
> * `min(l)` : Devuelve el mínimo elemento de la lista `l` siempre que los datos sean comparables.
> * `max(l)` : Devuelve el máximo elemento de la lista `l` siempre que los datos sean comparables.
> * `sum(l)` : Devuelve la suma de los elementos de la lista `l`, siempre que los datos se puedan
sumar.
> * `all(l)` : Devuelve `True` si todos los elementos de la lista `l` son `True` y `False` en caso
contrario.
> * `any(l)` : Devuelve `True` si algún elemento de la lista `l` es `True` y `False` en caso contrario
> * `dato in l` : Devuelve `True` si el dato `dato` pertenece a la lista `l` y `False` en caso contrario.
> * `l.index(dato)` : Devuelve la posición que ocupa en la lista `l` el primer elemento con valor
`dato`.
> * `l.count(dato)` : Devuelve el número de veces que el valor `dato` está contenido en la lista `l`.
l = list(range(3,15))
print(l)
l[4]=-5
print(l)
m = min(l)
print(m)
ma = max(l)
print(ma)
s = sum(l)
print(s)
l[-1] = None
print(l)
print( all(l))
z = -5 in l
print(z)
ind = l.index(-5)
print(ind)
> Continuación:
>
> * `l1 + l2` : Crea una nueva lista concatenan los elementos de la listas `l1` y `l2`.
> * `l.insert(índice, dato)` : Inserta `dato` en la posición `índice` de la lista `l` y desplaza los
elementos una posición a partir de la posición `índice`.
> * `l.remove(dato)` : Elimina el primer elemento con valor `dato` en la lista `l` y desplaza los que
están por detrás de él una posición hacia delante.
> * `l.pop([índice])` : Devuelve el dato en la posición `índice` y lo elimina de la lista `l`, desplazando
los elementos por detrás de él una posición hacia delante.
> * `l.sort()` : Ordena los elementos de la lista `l` de acuerdo al orden predefinido, siempre que los
elementos sean comparables.
l2 = [1,3,4,7,8, True]
l3 = l1+l2
print(l3)
l1.append(9)
print(l1)
l1.insert(1, -8)
print(l1)
l1.remove("b")
print(l1)
valor=l1.pop(2)
print(l1)
print(valor)
>
>
l1 = [2,5,7,9]
l2 = l1
l1.append(-7)
print(l1)
print(l2)
l1 = [2,5,7,9,7,6,5,4,3]
l2 = l1[2:7]
print(l1)
print(l2)
l2[0]=-9
print(l1)
print(l2)
l1 = [2,5,7,9]
l2 = l1.copy()
l1.append(-7)
print(l1)
print(l2)
l = list(range(1000000000))
print("hola")
l2 = l1.copy()
---
# Pregunta en Socrative...
<!--
x = [1,2,3,4,5]
a) 16
b) 20
c) 24
d) 12
e) 10
-->
<!--
x = [0,1,2,3,4,5,6,7,8]
y = x[5:9] + x[0:5]
a)[5, 6, 7, 8, 0, 1, 2, 3, 4, 5]
b)[5, 6, 7, 8, 9, 0, 1, 2, 3, 4]
c)[5, 6, 7, 8, 9, 1, 2, 3, 4, 5]
d)[5, 6, 7, 8, 0, 1, 2, 3, 4]
e)[1, 2, 3, 4, 5, 6, 7, 8, 0]
-->
---
# Tuplas
>
> Se construyen poniendo los elementos entre paréntesis ( ) separados por comas.
>
>
> * Al igual que los strings y las listas, se pueden acceder los elementos con índices (positivos o
negativos)
> * Al igual que los strings y las listas, también se puede aplicar la operación **slicing**
print(x[2:])
print(x.index("hola"))
type(x)
print(x[4].append(5))
print(x)
x =[2,3,4]
print(x)
type(x)
print(x)
> ## Funciones y métodos de tuplas
>
> * `min(t)` : Devuelve el mínimo elemento de la tupla `t` siempre que los datos sean comparables.
> * `max(t)` : Devuelve el máximo elemento de la tupla `t` siempre que los datos sean
comparables.
> * `sum(t)` : Devuelve la suma de los elementos de la tupla `t`, siempre que los datos se puedan
sumar.
> * `all(t)` : Devuelve `True` si todos los elementos de la tupla `t` son `True` y `False` en caso
contrario.
> * `any(t)` : Devuelve `True` si algún elemento de la tupla `t` es `True` y `False` en caso contrario
> * `dato in t` : Devuelve `True` si el dato `dato` pertenece a la tupla `t` y `False` en caso contrario.
> * `t.index(dato)` : Devuelve la posición que ocupa en la tupla `t` el primer elemento con valor
`dato`.
> * `t.count(dato)` : Devuelve el número de veces que el valor `dato` está contenido en la tupla `t`.
pass
---
# Pregunta en Socrative...
<!--
x = (1,2,0,4,5)
y=(5-0)*5
a) 25
b) 20
c) 22
d) 16
e) 28
-->
<!--
x = (1,2,3,4,5)
y = sum((3,4,5))
a) 9
b) 12
c) 7
d) 14
e) 15
-->
---
# Diccionarios
> Un diccionario es una colección de pares formados por una 'clave' y un 'valor' asociado a la clave.
>
> Se construyen poniendo los pares entre llaves `{clave1: valor1, clave2: valor2 ...}` separados por
comas, y separando la clave del valor con dos puntos `:`.
>
>
> * **No se puede aplicar** la operación **slicing**. Se utilizan las claves definidas para acceder a
los datos o valores.
print(d["numero"])
des = [
{"nombre":"Robinson","apellido":"Duque","edad": 37},
{"nombre":"Kellys","apellido":"Santa","edad": 20},
print(des[0]["nombre"])
print(des[0]["apellido"])
print(des[0]["edad"])
print(des[1]["nombre"])
print(des[1]["apellido"])
print(des[1]["edad"])
print(des[2]["nombre"])
print(des[2]["apellido"])
print(des[2]["edad"])
print(des[2]["notas"][1])
>
> * `max(d)` : Devuelve la máxima clave del diccionario `d` siempre que las claves sean
comparables.
> * `sum(d)` : Devuelve la suma de las claves del diccionario `d`, siempre que las claves se puedan
sumar
> * `clave in d` : Devuelve `True` si la clave `clave` pertenece al diccionario `d` y `False` en caso
contrario.
v = d.values()
print(type(v))
print(sum(v))
print(sum( d.values() ))
v = list(d.items())
print(v)
> Continuación:
>
> `d[clave] = valor` : Añade al diccionario `d` el par formado por la clave clave y el valor `valor`.
> * `d.update(d2)`. Añade los pares del diccionario `d2` al diccionario `d`.
> * `d.pop(clave, alternativo)` : Devuelve del valor asociado a la clave `clave` del diccionario `d` y lo
elimina del diccionario. Si la clave no está devuelve el valor alternativo.
> * `d.popitem()` : Devuelve la tupla formada por la clave y el valor del último par añadido al
diccionario `d` y lo elimina del diccionario.
> * `del d[clave]` : Elimina del diccionario `d` el par con la clave `clave`.
> * `d.clear()` : Elimina todos los pares del diccionario `d` de manera que se queda vacío.
d["nuevo"]=-8
d[2]=-30
print(d)
>
>
pass
---
# Pregunta en Socrative...
<!--
y = x[1] + x[2]
a) "Azul Rojo"
b) Error
c) "AzulRojo"
d) "1:Azul2:Rojo"
e) "12"
-->
<!--
x[1],x[2] = x[2],x[1]
x[6] = "Naranja"
del x[3]
b) Error
-->
---
# Condicionales
>
> ```ipython
if condición1:
bloque código
elif condición2:
bloque código
...
else:
bloque código
> ```
>
> Evalúa la expresión lógica `condición` y ejecuta el primer bloque de código si es `True`; si no,
evalúa la siguientes condiciones hasta llegar a la primera que es `True` y ejecuta el bloque de
código asociado. Si ninguna condición es `True` ejecuta el bloque de código después de `else`.
>
>Pueden aparecer varios bloques `elif` pero solo uno `else` al final.
n = int(input("Ingrese un número"))
if n>=0:
x = n*2
n = int(input("Ingrese un número"))
if n>=0:
x = n*2
else:
x = abs(n)
n = int(input("Ingrese un número"))
if n>0:
print("El número es positivo")
x = n*2
elif n==0:
else:
x = abs(n)
n = int(input("Ingrese un número"))
if n>0:
x = n*2
if n%2==0:
else:
elif n==0:
else:
x = abs(n)
print("El valor absoluto de {} es {}".format(n,x))
# Bucles de repetición
> En Python existen los bucles `while` y `for`. Particularmente nos enfocaremos más a fondo en los
bucles `for` puesto que son los que utilizaremos principalmente en el curso para recorrer
secuencias de datos.
>
>
> ```ipython
while condición:
bloque código
>```
>
> Repite la ejecución del bloque de código mientras la expresión lógica 'condición' sea cierta. Se
puede interrumpir en cualquier momento la ejecución del bloque de código con la instrucción
`break`.
num = None
while num != 0:
n=0
n+=1;
print(n)
> ```ipython
for i in secuencia:
bloque código
> ```
>
> Repite la ejecución del bloque de código para cada elemento de la secuencia secuencia, asignado
dicho elemento a i en cada repetición.
>
>Se puede interrumpir en cualquier momento la ejecución del bloque de código con la instrucción
`break` o saltar la ejecución para un determinado elemento de la secuencia con la instrucción
`continue`.
>
> Se utiliza fundamentalmente para recorrer colecciones de objetos como cadenas, listas, tuplas o
diccionarios.
aux=""
for i in c:
if i=="a":
aux+="A"
else:
aux+=i
print(aux)
#c2= c.replace("a","A")
#print(c2)
l = list(range(5)) + [-3,4]
print(l)
nl=[]
for i in l:
if i>=0:
nl.append(i)
else:
nl.append(abs(i))
print(nl)
nl2=[]
for i in l:
if i>=0:
nl2.append(i)
else:
break
print(nl2)
print(t)
aux=[]
for i in t:
aux.append(i)
print(aux)
des = [
{"nombre":"Robinson","apellido":"Duque","edad": 37},
{"nombre":"Kellys","apellido":"Santa","edad": 20},
#for i in des:
# print(i["apellido"])
d = {"nombre":"Robinson","apellido":"Duque","edad": 37}
valores=[]
for i in d.values() :
valores.append(i)
print(valores)
print(list(d.values()))
print(list(d.keys()))
print(list(d.items()))
# y range'(inicio,fin,salto)'
for i in range(0,90,5):
print(i)
---
# Pregunta en Socrative...
<!--
x = [1,-2,3,4,-7,8]
y = []
for i in x:
if i>=0:
y.append(i)
a) Error
b) [1, 3, 4, 8]
c) [-2, -7]
d) [3, 4, 8]
e) [1, 3, 4]
-->
<!--
x = "Fundamentos"
y = []
for i in x:
if i != "a":
y.append(i.upper())
else:
y.append(i)
a) Error
b) ["f","u","n","d","a","m","e","n","t","o","s"]
c) "fundAmentos"
d) "FUNDaMENTOS"
e) ['F', 'U', 'N', 'D', 'a', 'M', 'E', 'N', 'T', 'O', 'S']
-->
---
> En muchas aplicaciones es habitual aplicar una función o realizar una operación con los
elementos de una colección (lista, tupla o diccionario) y obtener una nueva colección de elementos
transformados. Aunque esto se puede hacer recorriendo la secuencia con un bucle iterativo,
Python incorpora un mecanismo muy potente que permite esto mismo de manera más simple y
eficiente.
>
>
>
>* **Diccionarios:** \{exp-clave : exp-valor `for` variable `in` secuencia `if` condicion\}
>
>* **Conjuntos:** \{expresion `for` variable `in` secuencia `if` condicion\}
l=[3,4,5,-2,-7,9]
print(l2)
l3 = [ (i,i*2,i*3) for i in l]
print(l3)
for i in l ]
print(l4)
def funcionCondicion(x):
if x%2==0:
return x*2
elif x>3:
return x+2
else:
return x
[funcionCondicion(i) for i in l]
l = [4,5,6,6,6,7,7,3,4,5]
c = set(l)
print(c)
print(gen)
print(type(gen))
for i in gen:
print(i)
if i == 10:
break
for i in gen:
print(i)
pass
l = [x for x in range(15) if x % 2 == 0]
print(l)
pass
pass
pass
# Ejemplos de diccionarios por comprensión (sin condición)
pass
pass
pass
pass
d = {"nombre":"Robinson","apellido":"Duque","edad": 37}
print(l2)
---
# Pregunta en Socrative...
<!--
x = [1,2,3,4,5,6]
b) [2, 4, 6, 8, 10]
c) [8, 6, 4, 2]
d) [10, 8, 6, 4, 2]
e) Error
-->
x = [1,2,3,4,5,6]
print(y)
<!--
x = [1,2,3,3,2,2,1,4]
y = { i for i in x }
a) [1, 2, 3, 4]
b) [1, 1, 2, 2, 2, 3, 3, 4]
c) {1, 1, 2, 2, 2, 3, 3, 4}
d) {1, 2, 3, 4}
e) Error
-->
<!--
y = { i*2 : i for i in x }
e) Error
-->
---
# Funciones
> Una función es un bloque de código que tiene asociado un nombre, de manera que cada vez que
se quiera ejecutar el bloque de código basta con invocar el nombre de la función.
> ```ipython
bloque código
return <objeto>
```
pass
pass
pass
# Ejemplo de función sin parámetros y su respectiva invocación
def funcionRara():
print("Hola mundo")
x = funcionRara()
print(x)
def funcionSuma(a,b,lista):
l1 = list(range(a))
l2 = list(range(b))
return l1+l2+lista
x=6
y = funcionSuma(x,7, [4,5,6,7,8])
print(y)
a,*b = (4,5,6,7,1,2)
print(a)
print(b)
a,*b,c = (4,5,6,7,1,2)
print(a)
print(b)
print(c)
def miFuncion(a,b):
a = b*2
b = a*3
return (a,b)
v1,v2 = miFuncion(8,9)
print(v1)
print(v2)
> ## Invocación
>Los valores que se pasan a la función en una llamada o invocación concreta de ella se conocen
como argumentos y se asocian a los parámetros de la declaración de la función.
>
>
>
> Por otro lado, también existen **argumentos por defecto**. En la definición de una función se
puede asignar a cada parámetro un argumento por defecto `parámetro=argumento`, de manera
que si se invoca la función sin proporcionar ningún argumento para ese parámetro, se utiliza el
argumento por defecto.
pass
pass
pass
def multiplicar(a,b=1):
return (a, b)
print(multiplicar(3,4))
print(multiplicar(5))
print(multiplicar(a=3,b=5))
print(multiplicar(b=5,a=3))
>Los parámetros y las variables declaradas dentro de una función son de **ámbito local**,
mientras que las definidas fuera de ella son de **ámbito ámbito global**.
pass
l = [9,5,6,7]
def miFuncionRara(lista,pos,val):
lista[pos] = val
print(l)
miFuncionRara(l,2,4)
print(l)
x=5
def miFuncion(y):
z = y*2
return z
miFuncion(x)
print(z)
> En Python el paso de argumentos a una función es siempre por referencia, es decir, se pasa una
referencia al objeto del argumento, de manera que cualquier cambio que se haga dentro de la
función mediante el parámetro asociado afectará al objeto original, siempre y cuando este sea
mutable (e.g., listas, diccionarios).
>
>Recordemos que en Python existen objetos inmutables, como los enteros, strings, booleanos y las
tuplas, por lo que si intentáramos modificar una tupla pasada como parámetro lo que ocurriría en
realidad es que se crearía una nueva instancia, por lo que los cambios no se verían fuera de la
función.
>
> **En resumen:** Los valores mutables (listas y diccionarios) se comportan como paso por
referencia, y los inmutables como paso por valor.
pass
> También podemos encontrarnos con una cadena de texto como primera línea del cuerpo de la
función. Estas cadenas se conocen con el nombre de **docstring** (cadena de documentación) y
sirven, como su nombre indica, a modo de documentación de la función. Esto es lo que imprime el
opeardor `?` de iPython o la función `help`.
Parámetros:
Resultado:
"""
area_triangulo?