funciones de orden superior
variable apunta a una función, un poco como de apellido
>>> f = abs >>> f (-10 ) 10
Las funciones son también nombre de la variable
ABS = 10 >>> >>> ABS (-10 ) Rastreo (más reciente Última llamada): File " <stdin> " ., Línea 1, en <Módulo1> TypeError: ' int ' Objeto ES No es rescatable # código real nunca se debe así que escribe, para explicar el nombre de la función también es variable. Para restaurar la función ABS, reinicie Python entorno interactivo.
Recepción de funciones como parámetros -> funciones de orden superior
def añadir (x, y, f): retorno f (x) + f (y)
Cuando llamamos # add (-5, 6, abs) , los parámetros X, Y y f se reciben -5 , 6 y abs, una definición de función, podemos derivar el cálculo es:
x = -5 y = 6 f = ABS f (x) + f (Y) ==> abs (-5) + abs (6) ==> 11 de retorno 11
Curiosamente, funciones de alto orden
MAP:
función acepta dos parámetros, de una función, uno es Iterable
, map
la función de entrada para activar la función de cada elemento de la secuencia, y los resultados como una nueva Iterator
vuelta
>>> def f (x): ... retorno x * x ... >>> r = map (f, [1, 2, 3, 4, 5, 6, 7, 8, 9 ]) >> > lista (r) [ 1, 4, 9, 16, 25, 36, 49, 64, 81]
map()
El primer argumento es f
que la función de objeto en sí mismo.
Puesto que el resultado r
es una Iterator
, Iterator
es una secuencia inerte, por lo que por list()
la función que calcula las secuencias completas y devuelve una lista.
>>> lista (mapa (str, [1, 2, 3, 4, 5, 6, 7, 8, 9 ])) [ ' 1 ' , ' 2 ' , ' 3 ' , ' 4 ' , ' 5 ' , ' 6 ' , ' 7 ' , ' 8 ' , ' 9 ' ]
reducir ()
para efectuar una función (la muñeca comportamiento) en una secuencia
reducir (f, [x1, x2, x3, x4]) = f (f (f (x1, x2), x3), x4)
EG1: la secuencia [1, 3, 5, 7, 9]
en número entero13579
>>> de functools importar reducir >>> def fn (x, y): ... retorno x * 10 + y ... >>> reducir (fn, [1, 3, 5, 7, 9 ]) 13579
EG2: a str
convertir int
la función:
>>> de functools importar reducir >>> def fn (x, y): ... de retorno x * 10 + y ... >>> def char2num (s): ... dígitos = { ' 0 ' : 0 , ' 1 ' : 1, ' 2 ' : 2, ' 3 ' : 3, ' 4 ' : 4, ' 5 ' : 5, ' 6 ' : 6, ' 7 ' : 7,'8 ' : 8, ' 9 ' : 9 } ... retorno dígitos [S] ... >>> reducir (fn, mapa (char2num, ' 13579 ' )) 13579
----------- ----------------
from functools import reduce
DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} def str2int(s): def fn(x, y): return x * 10 + y def char2num(s): return DIGITS[s] return reduce(fn, map(char2num, s))
------------------------------
from functools import reduce
DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} def char2num(s): return DIGITS[s] def str2int(s): return reduce(lambda x, y: x * 10 + y, map(char2num, s))
filtrar()
secuencia filtrada, la función se pasa sucesivamente a cada elemento, basado en el valor devuelto True
se False
decidió mantener o descartar el elemento.
parámetros de recepción: función de secuencia +
inerte función devuelve un iterador
usando:
# En una lista en el incluso eliminado, dejando sólo el número impar, se puede escribir: DEF is_odd (n-): retorno . N-% 2 == 1 lista (filtro (is_odd, [ . 1, 2 ,. 4 ,. 5 ,. 6 ,. 9, 10, 15 ])) # resultados: [1, 5, 9, 15] # cadena vacía en una secuencia eliminado, podría escribir: DEF not_empty (S): retorno S y s.strip () lista ( filtro (not_empty, [ ' A ' , '' , ' B ' , Ninguna, ' C ' , ' ' ])) # resultados: [ 'A', 'B ', 'C']
DEF _odd_iter (): # secuencia impar empezando con 3 n- = 1. El mientras Verdadero: n- = n-2 + el rendimiento n- DEF _not_divisible (n-): # funciones de filtro devuelven la lambda X: X% n-> 0 #x se deriva de ella, n se de una secuencia impar impar extrae, n-prueba del pliegue en n y se retira DEF primos (): # rendimientos generador el próximo primer el rendimiento 2 es = _odd_iter () # de secuencia inicial el mientras Verdadero: n = siguiente (se ) # devuelve un primer número de secuencia que el rendimiento n- IT = filtro (_not_divisible (n-), IT) # La nueva configuración de la secuencia # impresión primos menos de 1000: para n- en números primos (): IF n- <1,000 : Imprimir (n-) la otra cosa : ROTURA
Ordenado
función funcional mapeo de pedido (lista, clave = func),función especificada que actúa sobre cada elemento de la lista, ordenados por el resultado devuelto por la tecla de función.
>>> ordenados ([36, 5, -12, 9, -21 ]) [ -21, -12, 5, 9, 36 ] >>> ordenados ([36, 5, -12, 9, -21] , clave = abs) [ 5, 9, -12, -21, 36]
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower) ['about', 'bob', 'Credit', 'Zoo']
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True) ['Zoo', 'Credit', 'bob', 'about']