Python3
def sample_func_1(text : str) -> str:
add_text = "Chaîne ajoutée"
return (text + add_text)
def sample_func_2(text : str) -> str:
add_text2 = "Chaîne ajoutée"
return (text + add_text2)
Python3
func_dict = {
'label_1' : sample_func_1,
'label_2' : sample_func_2
}
La valeur de valeur du dictionnaire (* dict ) est l'objet fonction (méthode) lui-même. Par conséquent, afin d'exécuter une fonction (méthode), il est nécessaire d'ajouter des parenthèses ("()") pour recevoir l'argument à la valeur valeur du dictionnaire ( func_dict *).
Le résultat de l'appel de la fonction (méthode) "elle-même" stockée comme valeur de valeur du dictionnaire (* dict *) sans parenthèses ("()") est le suivant.
Python3
func_dict['label_1']
<function sample_func_1 at 0x100bafb80>
Afin d'exécuter la fonction (méthode) appelée depuis le dictionnaire avec le code ci-dessus, il est nécessaire de mettre une parenthèse ("()") qui reçoit l'argument.
Python3
func_dict['label_1']()
__ Si * funct_dict * est une méthode qui reçoit un ou plusieurs arguments, une erreur se produira si vous appelez la fonction sans donner d'arguments. __
La méthode définie (fonction) était une fonction qui prend un objet de type * str * comme argument. Passez une chaîne de caractères appropriée comme argument et essayez d'exécuter la méthode (fonction) stockée dans * func_dict *.
Python3
func_dict['label_1']("vxw")
#Résultat d'exécution
'vxw a ajouté une chaîne'
Python3
func_dict
#Résultat d'exécution
{'label_1': <function sample_func_1 at 0x100bafaf0>, 'label_2': <function get_text_from_ppt at 0x100bafa60>}
func_dict['label_1']
<function sample_func_1 at 0x100bafb80>
type(func_dict['label_1'])
#Résultat d'exécution
<class 'function'>
type(func_dict['label_1']())
#Résultat d'exécution
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sample_func_1() missing 1 required positional argument: 'text'
type(func_dict['label_1']("giho"))
#Résultat d'exécution
<class 'str'>
func_dict['label_1']("giho")
#Résultat d'exécution
'giho a ajouté une chaîne de caractères'
returned_value = func_dict['label_1']("giho")
returned_value
#Résultat d'exécution
'giho a ajouté une chaîne de caractères'
En utilisant la méthode introduite cette fois, il est possible d'appeler la fonction (méthode) correspondant à la * Key * en fonction de la valeur de * Key * définie dans l'objet de type dictionnaire.
Ceci est utile lorsque vous avez besoin d'une logique pour basculer la fonction (méthode) appropriée à appeler en fonction des conditions du flux de traitement des données.
À titre d'exemple de base, vous pouvez penser à une situation dans laquelle une fonction (méthode) qui effectue le traitement requis pour un fichier lu est sélectionnée, appelée et exécutée dynamiquement en fonction du contenu de l'extension du fichier lu.
Le code pour couper uniquement la chaîne de caractères de texte et acquérir les données à partir du fichier PDF, du fichier Word et du fichier Excel est présenté sur la page Web suivante.
Python3
def get_text_from_txt(filename : str) -> str:
Lire le fichier texte stocké dans le chemin reçu comme nom de fichier et lire le texte*str*Traitement pour acquérir en tant qu'objet et sortir en tant que valeur de retour
return text
def get_text_from_pdf(filename : str) -> str:
Lisez le fichier PDF stocké dans le chemin reçu en tant que nom de fichier, extrayez la chaîne de texte et un*str*Traitement pour concaténer à un objet et sortie en tant que valeur de retour
return text
def get_text_from_word(filename : str) -> str:
Lisez le fichier Word stocké dans le chemin reçu comme nom de fichier, extrayez la chaîne de texte et un*str*Traitement pour concaténer à un objet et sortie en tant que valeur de retour
return text
def get_text_from_excel(filename : str) -> str:
Lisez le fichier Excel stocké dans le chemin reçu en tant que nom de fichier, extrayez la chaîne de texte et un*str*Traitement pour concaténer à un objet et sortie en tant que valeur de retour
return text
func_dict = {
'txt' : get_text_from_txt,
'pdf' : get_text_from_pdf,
'word' : get_text_from_word,
'excel' : get_text_from_excel
}
Lors du stockage d'une fonction (méthode) dans * Value * du dictionnaire, si vous mettez des parenthèses sur la fonction, l'erreur suivante se produira. Si vous essayez d'exécuter une fonction, elle sera interprétée.
PZython3
func_dict = {
'label_1' : sample_func_1(),
'label_2' : sample_func_2()
}
#Résultat d'exécution
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
TypeError: sample_func_1() missing 1 required positional argument: 'text'
Définition d'un dictionnaire Dans le code ci-dessus, vous pouvez définir un dictionnaire (sans erreur) en donnant un argument spécifique entre parenthèses de * sample_func_1 () *.
Cependant, la fonction stockée dans * Value * du dictionnaire devient une fonction qui ne peut recevoir que les arguments reçus lors de la définition du dictionnaire.
__ (Définition du dictionnaire) __
Python3
func_dict = {
'label_1' : sample_func_1("abc"),
'label_2' : sample_func_2("def")
}
__ (Appel d'une fonction dans le dictionnaire) __
Dans le dictionnaire * func_dict *, la fonction * sample_func_1 ("abc") , qui est définie comme * Value * correspondant à * Key * " label_1 *", est exécutée avec l'argument "abc" donné. A été fait.
Python3
func_dict['label_1']
#Résultat d'exécution
'abc Chaîne ajoutée'
Python3
func_dict['label_1']()
#Résultat d'exécution
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable
Python3
func_dict['label_1']("abc")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable
Python3
unc_dict['label_1']('abc')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable
__ Stockez une chaîne de texte dans * Val * du dictionnaire et utilisez * eval * et * exec * pour appeler la fonction. __
__ Cependant, il n'est pas élégant car il augmente le nombre de coups sur le clavier. __
Python3
func_dict = {
'label_1' : "sample_func_1({arg})",
'label_2' : "sample_func_2({arg})"
}
Python3
func_dict
#Résultat d'exécution
{'label_1': 'sample_func_1({arg})', 'label_2': 'sample_func_2({arg})'}
func_dict['label_1']
#Résultat d'exécution
'sample_func_1({arg})'
expression = func_dict['label_1'].format(arg="'123'")
expression
#Résultat d'exécution
"sample_func_1('123')"
eval(expression)
#Résultat d'exécution
'123 Chaîne ajoutée'
result = eval(expression)
result
#Résultat d'exécution
'123 Chaîne ajoutée'
add_text = "result2="
text = add_text + expression
text
#Résultat d'exécution
"result2=sample_func_1('123')"
exec(text)
result2
#Résultat d'exécution
'123 Chaîne ajoutée'
Recommended Posts