Python interesante sintaxis dulce
Expresión lambda
Función anónima.
Uso: lista de parámetros lambda: valor de retorno
Ejemplo:
1 función
f=lambda x: x 1
función max (la declaración condicional se escribe de la siguiente manera)
f_max=lambda x, y: x if xgt y else y
La función definida anteriormente y la función definido con def No hace ninguna diferencia, en algunos casos el f= de la izquierda es innecesario.
filtrar, mapear, reducir
La función de filtro acepta dos parámetros, el primero es una función de filtro, el segundo es un objeto transitable, utilizado para seleccionar el filtro que satisface el filtro Para Todos los elementos de la condición, las diferentes versiones de los valores de retorno del filtro son ligeramente diferentes. Estoy usando Python3.5 y el filtro devuelve un objeto atravesable filtrado.
Ejemplo:
Eliminar letras minúsculas
s=filter(lambda x: not str(x).islower(), "asdasfAsfBsdfC")
para ch en s:
print(ch)
La función de mapa acepta tipos de parámetros similares a los filtros y se utiliza para ejecutar en cada elemento de la función de objeto transitable. Esto es similar al concepto de mapeo en matemáticas.
Ejemplo:
Encontrar y=2x 1 (usó en secreto la función de rango para generar el dominio)
s=map(lambda x: 2*x 1 , range(6))
para x en s:
print(x)
La función de reducción realiza una operación de acumulación y el primer parámetro que acepta Debe ser una función con dos parámetros.
Ejemplo:
Suma
de functools importar reducir
s=reduce(lambda x,y:x y,range(1 , 6))
imprimir(s)
Producto (el tercer parámetro opcional representa el valor inicial de la variable acumulada)
desde functools importar reducir
s=reduce(lambda x, y: x*y, range(1, 6), 1)
imprimir(s)
Función Curry p>
Si una función requiere 2 parámetros y solo pasas un parámetro, obtendrás una función curry, que es una de las características importantes de los lenguajes de programación funcionales. Desafortunadamente, Python no admite llamadas curl a nivel de sintaxis, pero se proporciona una interfaz en la biblioteca.
Ejemplo:
función *3
f_mul=lambda x, y: x*y
desde functools importación parcial
mul3=partial(f_mul, 3)
print(mul3(1))
print(mul3(6))
Embalaje y desembalaje Los paquetes
son algo similares a la coincidencia de patrones en funciones, lo cual es un poco exagerado.
t=(1, 2, 3)
x, y, z=t
Generador de listas
Este también es un Un poco inverosímil, no sé si es estrictamente funcional.
Ejemplo: Generar secuencia de números impares
l=[2*x 1 for x in range(10)]
for i in l:
print(i)
Finalmente, un huevo de pascua (el algoritmo utilizado por un encuestado anterior para embellecer el rostro usando la función de segmentación de tono, olvidé cómo surgió, fue eliminado)
Importar imágenes desde PIL
Esto también es un poco complicado. desde PIL importar imagen
desde matemáticas importar sqrt
im = Image.open("a.jpg")
ret= im.convert(mode=" RGB")
ret = ret.point( lambda x:sqrt(x)*sqrt(255))
ret.save("b.jpg")