Après tout, que dois-je utiliser pour faire des comparaisons de types en Python?

Différence entre ʻiset==`

== est jugé par "s'il s'agit de la même valeur", tandis que ʻis` est jugé par "s'il s'agit du même objet". Par exemple, dans l'exemple suivant

>>> a = "hello"
>>> b = "hello"

Les deux objets ont la même valeur, donc par rapport à ==, il renvoie True.

>>> a == b
True

Cependant, ʻisest jugé par "est-ce le même objet?" En Python, lorsque vous créez un objet, il reçoit un numéro unique. «Est» est identifié par son numéro. Vous pouvez vérifier le numéro avec ʻid ().

>>> id(a)
2827074142256
>>> id(b)
2827074145520
>>> a is b
False

Vous pouvez également comparer les types avec ʻis instance`

ʻIs instance` est une fonction qui compare les classes d'objets. Renvoie «True» par rapport à la classe parent si elle est héritée d'une autre classe

>>> class customint(int):
...     pass
...
>>> c = customint()
>>> type(c) == int
False
>>> type(c) is int
False
>>> isinstance(c, int)
True

Mesurer le temps d'exécution

Choses à faire

Exécutez chaque fonction 10 000 000 fois (10 millions de fois) et mesurez le temps d'exécution Répétez cette opération 10 fois pour calculer la moyenne Pour référence, j'exécute également une fonction qui boucle 10000000 fois sans rien faire

Code source

#!/usr/bin/env python3
# coding: utf-8

from time import time

intvar = 0
n = 10 ** 7


def gettime(name, num=10):
    """
Exécutez 10 fois, mesurez le temps d'exécution et calculez la moyenne
    """
    def func(fn):
        def wrapper(*args, **kwargs):
            strat_t = time()
            for a in range(num):
                fn(*args, **kwargs)
            dur = (time() - strat_t) / 10
            print(name, "\t:", dur)
        return wrapper
    return func


@gettime("simple\t")
def simple():
    for x in range(n):
        pass


@gettime("equal\t")
def equal():
    for x in range(n):
        res = type(intvar) == int


if type(intvar) == True:
    pass


@gettime("is\t")
def iscompare():
    for x in range(n):
        res = type(intvar) is int


@gettime("isinstance")
def isinstancecompare():
    for x in range(n):
        res = isinstance(intvar, int)


if __name__ == '__main__':
    simple()
    equal()
    iscompare()
    isinstancecompare()

résultat

(Unité: secondes)

Environnement d'exécution Windows 10
Intel Core i7-8550U @ 1.80GHz
RAM:16GB
VPS de Sakura(v3) 1G
Boucle vide 0.1508335590362549 0.37562224864959715
== 0.8364578723907471 1.9130330801010131
is 0.8253042459487915 1.799116063117981
isinstance 0.5259079456329345 1.3679522275924683

Considération

Le temps d'exécution est == > is >>> isinstance C'est devenu un sentiment. Alors

--Je veux faire une comparaison de type en tenant compte de l'héritage ――Je ne suis pas sûr de l'héritage, mais je veux juste trouver de la vitesse

En cas d '«instance»,

--Je veux ignorer l'héritage et effectuer une comparaison de type

Dans ce cas, utilisez ʻis`.

Impressions

J'ai utilisé le décorateur pour la première fois, mais c'est vraiment pratique

Recommended Posts

Après tout, que dois-je utiliser pour faire des comparaisons de types en Python?
Que dois-je faire avec la structure de répertoires Python après tout?
Quelle commande dois-je taper pour lister les modules actuellement disponibles comme la liste des gemmes en python?
Que faire lorsque le type de valeur est ambigu en Python?
Je veux faire le test de Dunnett en Python
[Python] Ce que j'ai fait pour faire un test unitaire
Que faire si vous ne pouvez pas utiliser la recherche de grille de sklearn en Python
Que dois-je faire avec DICOM de MPEG2?
[Question] Que se passe-t-il si vous utilisez% en python?
Que faire pour obtenir une feuille de calcul Google en Python
Que faire lorsque l'imitation est intégrée à Python
J'ai essayé de résumer comment utiliser les pandas de python
Je veux utiliser le jeu de données R avec python
Je veux faire quelque chose avec Python à la fin
Ce que j'ai appris en Python
Que faire lorsque ʻarguments [0] .scrollIntoView (); `échoue dans python sélénium
Je veux faire quelque chose comme sort uniq en Python
Que faire lorsque "SSL: CERTIFICATE_VERIFY_FAILED _ssl.c: 1056" apparaît en Python
[Python] Comment faire PCA avec Python
Que faire avec la sortie de PYTHON?
Comment utiliser Mysql avec python
Comment utiliser ChemSpider en Python
Comment utiliser PubChem avec Python
Que faire si vous obtenez moins zéro en Python
Configuration MacBookPro Après tout, je veux faire une installation propre
Ce à quoi j'étais accro avec json.dumps dans l'encodage base64 de Python
Comment utiliser l'astérisque (*) en Python. C'est peut-être tout? ..
[Python] Lorsque vous souhaitez utiliser toutes les variables dans un autre fichier
Je voulais faire quelque chose comme la pipe d'Elixir en Python
Que faire si vous ne pouvez pas utiliser la poubelle dans Lubuntu 18.04.
Quelle automatisation doit être effectuée en RPA, VBA, langage de programmation?
Que faire lorsque ModuleNotFoundError: Aucun module nommé'XXX 'ne se produit en Python
J'ai essayé d'implémenter PLSA en Python
[Introduction à Python] Comment utiliser la classe en Python?
J'ai essayé d'implémenter la permutation en Python
Comment faire R chartr () en Python
J'ai essayé d'implémenter PLSA dans Python 2
Je veux utiliser jar de python
Analyse des données, que faites-vous après tout?
Un moyen simple d'utiliser Wikipedia avec Python
J'ai essayé d'implémenter ADALINE en Python
Je voulais résoudre ABC159 avec Python
J'ai essayé d'implémenter PPO en Python
Comment utiliser __slots__ dans la classe Python
Comment utiliser les expressions régulières en Python
Que faire après l'installation de Linux (Ubuntu)
Comment utiliser is et == en Python
Ce que j'ai fait pour économiser la mémoire Python
FBX SDK De quelles compétences ai-je besoin pour créer un programme à l'aide de Python?
[Python] J'ai essayé de résumer le type collectif (ensemble) d'une manière facile à comprendre.
Que faire s'il y a un décimal dans python json .dumps
Que faire si aucune documentation Python trouvée pour ... apparaît dans pydoc
Un mémorandum parce que j'ai trébuché en essayant d'utiliser MeCab avec Python
Je veux faire un patch monkey seulement en partie en toute sécurité avec Python
Que faire si PyInstaller3.5 provoque une erreur dans Python3.8 (TypeError: un entier est requis (obtenu les octets de type))
Comment utiliser la bibliothèque C en Python
Je souhaite visualiser l'état des transferts de la J League 2020, que dois-je faire?
[Python] Comment utiliser deux types de type ()
Je veux utiliser MATLAB feval avec python