Python3 punto final borrosa - Programación Funcional - Funciones avanzadas

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, mapla función de entrada para activar la función de cada elemento de la secuencia, y los resultados como una nueva Iteratorvuelta

    
>>> 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 fque la función de objeto en sí mismo.

Puesto que el resultado res una Iterator, Iteratores 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 strconvertir intla 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 Truese Falsedecidió 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']

 

Supongo que te gusta

Origin www.cnblogs.com/jpga/p/12580626.html
Recomendado
Clasificación