Funciones integradas y ayuda

Resumen

Enseñando: 15 min
Ejercicios: 10 min
Preguntas
  • ¿Cómo puedo usar las funciones integradas?

  • ¿Cómo puedo saber qué hacen?

  • ¿Qué tipo de errores pueden ocurrir en los programas?

Objectivos
  • Explicar el propósito de las funciones.

  • Llamar correctamente a las funciones integradas de Python.

  • Anidar correctamente las llamadas a las funciones integradas.

  • Usar la ayuda para mostrar la documentación de las funciones integradas.

  • Describir correctamente las situaciones en las que se producen SyntaxError y NameError.

Usa comentarios para agregar documentación a los programas.

# Esta oración no es ejecutada por Python.
adjustment = 0.5   #Tampoco esto - cualquier cosa despues de '#' es ignorado.

Una función puede tener cero o más argumentos.

print('before')
print()
print('after')
before

after

Las funciones incorporadas de uso común incluyen max, min y round.

print(max(1, 2, 3))
print(min('a', 'A', '0'))
3
0

Las funciones pueden funcionar solo para (combinaciones de) ciertos argumentos.

print(max(1, 'a'))
TypeError                                 Traceback (most recent call last)
<ipython-input-52-3f049acf3762> in <module>
----> 1 print(max(1, 'a'))

TypeError: '>' not supported between instances of 'str' and 'int'

Las funciones pueden tener valores por defecto para algunos argumentos.

round(3.712)
4
round(3.712, 1)
3.7

Usa la función incorporada help para obtener ayuda sobre una función.

help(round)
Help on built-in function round in module builtins:

round(number, ndigits=None)
    Round a number to a given precision in decimal digits.

    The return value is an integer if ndigits is omitted or None.  Otherwise
    the return value has the same type as the number.  ndigits may be negative.

Python reporta un error de sintaxis cuando no puede entender la fuente de un programa.

# Olvidar cerrar las comillas alrededor de la cadena de caracteres.
name = 'Feng
  File "<ipython-input-56-f42768451d55>", line 2
    name = 'Feng
                ^
SyntaxError: EOL while scanning string literal
# Un '=' adicional en la asignación.
age = = 52
  File "<ipython-input-57-ccc3df3cf902>", line 2
    age = = 52
          ^
SyntaxError: invalid syntax
print("hola mundo"
  File "<ipython-input-6-d1cc229bf815>", line 1
    print ("hola mundo"
                        ^
SyntaxError: unexpected EOF while parsing

Python reporta un error de tiempo de ejecución cuando algo anda mal mientras un programa se está ejecutando.

age = 53
remaining = 100 - aege # mal escrito 'age'
NameError                                 Traceback (most recent call last)
<ipython-input-59-1214fb6c55fc> in <module>
      1 age = 53
----> 2 remaining = 100 - aege # mal escrito 'age'

NameError: name 'aege' is not defined

La Libreta Jupyter ofrece dos formas de obtener ayuda.

Cada función devuelve algo.

result = print('ejemplo')
print('el resultado de print es', result)
ejemplo
el resultado de print es None

Qué ocurre cuándo

  1. Explica en términos simples el orden de operaciones en el siguiente programa: cuándo ocurre la adición y cuándo la sustracción, cuándo es llamada cada función, etc.
  2. ¿Cuál es el valor final de radiance?
radiance = 1.0
radiance = max(2.1, 2.0 + min(radiance, 1.1 * radiance - 0.5))

Solución

1.

  1. 1.1 * radiance = 1.1
  2. 1.1 - 0.5 = 0.6
  3. min(radiance, 0.6) = 0.6
  4. 2.0 + 0.6 = 2.6
  5. max(2.1, 2.6) = 2.6
  6. Al final, radiance = 2.6

Encuentra la diferencia

  1. Predice qué imprimirá cada una de las declaraciones print en el programa a continuación.
  2. ¿Corre max(len(rich), poor) o genera un mensaje de error? Si corre, ¿tiene sentido su resultado?
easy_string = "abc"
print(max(easy_string))
rich = "gold"
poor = "tin"
print(max(rich, poor))
print(max(len(rich), len(poor)))

Solucion

print(max(easy_string))
c
print(max(rich, poor))
tin
print(max(len(rich), len(poor)))
4

max(len(rich), poor) causa un TypeError. Esto se vuelve max(4, 'tin') y como discutimos antes un string y un integer no se pueden comparar significativamente.

TypeError                                 Traceback (most recent call last)
<ipython-input-65-bc82ad05177a> in <module>
----> 1 max(len(rich), poor)

TypeError: '>' not supported between instances of 'str' and 'int'

Por qué no?

Por qué max y min no devuelven None cuando no se les pasan argumentos?

Solución

max y min devuelven TypeErrors en este caso porque no se ha proporcionado el número correcto de parámetros. Si sólo devolvieran None, el error sería mucho más difícil de rastrear ya que probablemente estaría almacenado en una variable y usado luego en el programa, would likely be stored into a variable and used later in the program, sólo para causar un error de tiempo de ejecución.

Último Carácter de una Cadena

Si Python comienza a contar desde cero, y len devuelve el número de caracteres en una cadena, qué expresión de índice te devuelve el último carácter de la cadena name? (Nota: veremos una forma más simple de hacer esto en un episodio posterior.)

Solución

name[len(name) - 1]

Puntos Clave

  • Usar comentarios para agregar documentación a los programas.

  • Una función puede tomar cero o más argumentos.

  • Las funciones incorporadas de uso común incluyen max, min y round.

  • Las funciones solo pueden funcionar para ciertos (combinaciones de) argumentos.

  • Las funciones pueden tener valores predeterminados para algunos argumentos.

  • Usa la función incorporada help para obtener ayuda para una función.

  • La Libreta Jupyter tiene dos formas de obtener ayuda.

  • Cada función regresa algo.

  • Python reporta un error de sintáxis cuando no puede entender el código fuente de un programa.

  • Python reporta un error de tiempo de ejecución cuando algo sale mal mientras se ejecuta un programa.

  • Soluciona errores de sintaxis leyendo el código fuente y errores de tiempo de ejecución rastreando la ejecución del programa.