-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path04_funciones_almacenadas.py
95 lines (81 loc) · 2.5 KB
/
04_funciones_almacenadas.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
"""
Se pueden almacenar funciones dentro de diccionarios. Éstas podrían ser después
ejecutadas utilizando la siguiente sintaxis:
diccionario["nombre_de_la_clave"](parámetros)
Esto puede no ser habitual de utilizar, pero es un concepto que puede ser
interesante de utilizar en determinadas ocasiones.
"""
# CASO PRÁCTICO:
# Vamos a utilizar este método para obtener el tipo de dato de diferentes
# variables en formato string almacenadas en una lista. De esta forma, vamos a
# generar una lista de diccionarios que sigan el siguiente formato:
# { tipo_de_dato: valor }
import re
# Creamos el diccionario
TYPE_OPTIONS = {
"CodeValue":
lambda value: value
if re.match(r"(CD)+\d{6}", value) # O cualquier tipo de cifrado que queramos usar
else None,
"BooleanValue":
lambda value: value.lower() == "true"
if re.match(r"(true|false)", value, re.I)
else None,
"NumericValue":
lambda value: value
if value.replace(".", "", 1).isnumeric()
else None,
"NoValue":
lambda value: "UN"
if value == "-"
else None
}
# Lista con valores a analizar
VALUES = [
"3.14",
"true",
"False",
"CD123456",
"-",
"another string"
]
# Lógica para obtener un diccionario con los tipos de valores
values_with_types = []
for value in VALUES:
for option in TYPE_OPTIONS:
returned_value = TYPE_OPTIONS.get(option, None)(value)
if not returned_value is None:
values_with_types.append({
option: returned_value
})
break
# Podemos definir una forma de gestionar otros valores que no deseemos
# clasificar con las funciones utilizadas
if returned_value is None:
values_with_types.append({
"Undefined": value
})
# Mostrar el resultado por consola
for value_with_type in values_with_types:
print(value_with_type)
""" Se imprime:
{'NumericValue': '3.14'}
{'BooleanValue': True}
{'BooleanValue': False}
{'CodeValue': 'CD123456'}
{'NoValue': 'UN'}
{'Undefined': 'another string'}
"""
# Al ser una lista con diccionarios, éstos datos pueden ser accesibles más
# adelante de forma muy simple.
# Otra forma de mostrar los datos por consola
for value_with_type in values_with_types:
print(f" - {next(iter(value_with_type))}: {next(iter(value_with_type.values()))}")
""" Se imprime:
- NumericValue: 3.14
- BooleanValue: True
- BooleanValue: False
- CodeValue: CD123456
- NoValue: UN
- Undefined: another string
"""