Comment stocker une fonction Python dans la valeur d'un dictionnaire (dict) et appeler la fonction en fonction de la clé

1. Déclarer une méthode (fonction)

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)

2. Écrivez la fonction dans * Value * de l'objet de type dictionnaire (* dict *) sans parenthèses.

Python3


func_dict = {
	'label_1' : sample_func_1,
	'label_2' : sample_func_2
	}

3. Appelez et exécutez la fonction avec l'objet de type dictionnaire * Key * label name

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'

(Référence)

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'

(Page Web référencée)

  1. Article Qiita de @ satoichi "[Python] Exécuter des fonctions collectivement à l'aide d'un dictionnaire"
  2. "Dictionnaire des arguments de mots clés utilisant [Python] **"

(Usage)

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.

  1. blog deecode "[Python] Exemple de code de bibliothèque pour extraire du texte de Word / Excel / PowerPoint / PDF"
  2. Article Qiita de @ butada "Exploration de texte à partir de fichiers pdf / docx"

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
         }

(Remarques)

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


(Remarque 2)

__ 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

Comment stocker une fonction Python dans la valeur d'un dictionnaire (dict) et appeler la fonction en fonction de la clé
[Python] Comment trier un dict dans une liste et une instance dans une liste
[python] Comment vérifier si la clé existe dans le dictionnaire
Comment obtenir l'accès par attribut et la conservation de l'ordre d'insertion dans Python dict
[python] Résumé de la récupération des listes et des éléments du dictionnaire
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
Obtenir la valeur d'une clé spécifique jusqu'à l'index spécifié de la liste de dictionnaires en Python
Comment vérifier si le contenu du dictionnaire est le même en Python par valeur de hachage
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Je souhaite utiliser à la fois la clé et la valeur de l'itérateur Python
Comment utiliser is et == en Python
Comment obtenir la valeur du magasin de paramètres dans lambda (en utilisant python)
Comment générer une séquence en Python et C ++
Résumé de la façon d'importer des fichiers dans Python 3
Résumé de l'utilisation de MNIST avec Python
Comment obtenir des éléments de type dictionnaire de Python 2.7
[Python] Comment utiliser la fonction de hachage et taple.
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
Comment récupérer la nième plus grande valeur en Python
Comment obtenir le nombre de chiffres en Python
Comment définir Decorator et Decomaker avec une seule fonction
Comment écrire un type liste / dictionnaire de Python3
[Python] Comment appeler une fonction de c depuis python (édition ctypes)
Comment appeler une fonction
Comment développer en Python
Comment échanger des éléments dans un tableau en Python et comment inverser un tableau.
Comment utiliser la méthode __call__ dans la classe Python
[Introduction à l'application Udemy Python3 +] 36. Utilisation de In et Not
[Python] Résumé de l'utilisation des fonctions de fractionnement et de jointure
Comment développer dans un environnement virtuel Python [Memo]
Comment échantillonner à partir de n'importe quelle fonction de densité de probabilité en Python
Comment obtenir la dernière (dernière) valeur d'une liste en Python
Comment obtenir toutes les clés et valeurs du dictionnaire
Comment obtenir une liste d'exceptions intégrées pour python
Comment exécuter des commandes et des scripts shell externes en python
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Vue d'ensemble de l'environnement virtuel Python et comment le créer
Comment créer une instance d'une classe particulière à partir de dict en utilisant __new__ () en python
[Python] Comment supprimer des lignes et des colonnes dans une table (liste des options de méthode de dépôt)
[Super facile! ] Comment afficher le contenu des dictionnaires et des listes incluant le japonais en Python
Lorsqu'une chaîne de caractères d'une certaine série se trouve dans la clé du dictionnaire, la chaîne de caractères est convertie en valeur du dictionnaire.
Comment mettre à jour automatiquement la description de l'App Store dans Google Spreadsheets et Fastlane
[Python] Comment faire PCA avec Python
Comment déterminer l'existence d'un élément sélénium en Python
Comment installer OpenCV sur Cloud9 et l'exécuter en Python
Comment connaître la structure interne d'un objet en Python
Comment collecter des images en Python
Comment utiliser SQLite en Python
Comment vérifier la taille de la mémoire d'une variable en Python
[Introduction à Udemy Python3 + Application] 49. Citation de fonction et déclaration de valeur de retour
[Python] Comment obtenir le premier et le dernier jour du mois
Comment utiliser les fonctions dans des fichiers séparés version Perl et version Python
[Python] Temps d'exécution lorsqu'une fonction est saisie dans une valeur de dictionnaire
Comment déterminer qu'une clé croisée a été entrée dans Python3
Comment utiliser Mysql avec python
[Python] Comment obtenir une valeur avec une clé autre que value avec Enum
[ROS2] Comment décrire le remappage et les paramètres au lancement au format python
Comment envelopper C en Python
Comment utiliser ChemSpider en Python