petite histoire de python

introduction

J'étudie le python et le nombre de petites histoires a augmenté, je vais donc le résumer légèrement. Veuillez me pardonner, bien que certaines parties n'aient pas été étudiées en profondeur.

Liste des petites histoires

Petite histoire

J'expliquerai dans l'ordre du haut de la liste.

Identité et équivalence

L'identité signifie que les objets sont les mêmes et l'équivalence signifie que les valeurs sont les mêmes. L'identité est évaluée par «« est »», et l'équivalence est évaluée par «» = par la suite ». Maintenant, vérifions le résultat pour chaque type.

int

-5 à 256 entiers utilisent le même objet pour économiser la mémoire. Les autres entiers ne sont pas les mêmes même s'ils ont la même valeur.

a = 256
b = 256
a is b # True

c = 257
d = 257
c is d # False

e = -5
f = -5
e is f # True

g = -6
h = -6
g is h # False

float, long, complex

Cela se comporte différemment des entiers. Même si elles ont la même valeur, elles ne sont pas identiques car la mémoire stockée est différente.

a = 1.0
b = 1.0
a == b # True
a is b # False

a = 1L
a = 1L
a == b # True
a is b # False

a = 1 + 2j
b = 1 + 2j
a == b # True
a is b # False

bool

Il n'y a qu'un seul vrai / faux.

a = True
b = True
a is b # True

a = False
b = False
a is b # True

En passant, bool est une sous-classe de int, et False peut être traité comme` `` 0 et True comme `` 1.

isinstance(False, bool) # True
isinstance(False, int) # True

False == 0 # True
False is 0 # False

True == 1 # True
True is 1 # False

True + True # 2

result = -1
'OK' if result == 0 else 'NG' # 'NG'
('NG', 'OK')[result == 0] # 'NG'
result = 0
('NG', 'OK')[result == 0] # 'OK'

string

Les chaînes de caractères qui ne contiennent pas de caractères spéciaux sont les mêmes car elles sont internées dans la liste de noms. Si des caractères spéciaux tels que des espaces et des opérateurs sont inclus, ils ne sont pas identiques même s'ils ont la même valeur. Cependant, s'il n'y a qu'un seul caractère spécial, ce sera le même.

a = 'foo'
b = 'foo'
a == b # True
a is b # True

a = 'f o o'
b = 'f o o'
a == b # True
a is b # False

a = 'x+y'
b = 'x+y'
a == b # True
a is b # False

a = '/'
b = '/'
a == b # True
a is b # True

De plus, il n'en sera pas de même dans les cas suivants.

a = 'f'
a += 'oo'
b = 'foo'
a == b # True
a is b # False

list, tuple, dictionary

Comme les chaînes, la liste, le tuple et le dictionnaire ne sont pas les mêmes même s'ils ont la même valeur.

a = [1, 2, 3]
b = [1, 2, 3]
a == b # True
a is b # False

a = (1, 2, 3)
b = (1, 2, 3)
a == b # True
a is b # False

a = {'x': 1, 'y': 2}
b = {'x': 1, 'y': 2}
a == b # True
a is b # False

set

set est un ensemble avec des valeurs uniques. La particularité est qu'il n'y a aucune garantie de commande. Même si set a la même valeur, ce n'est pas la même chose.

a = set([1, 3, 2])
b = set([1, 3, 2])
c = set([1, 2, 3, 2])

a == b # True
a is b # False

a == c # True ->Vrai car il ne conserve pas les informations de commande et uniquement des valeurs uniques
a is c # False

Copie de la liste

En guise de mise en garde, si vous copiez en utilisant , la modification d'un élément changera également l'autre élément.

a = [1, 2, 3]
b = a
a[0] = [0, 0] # a: [[0, 0], 2, 3], b: [[0, 0], 2, 3] -> a[0]Si vous changez b[0]Va aussi changer

Si vous copiez à l'aide de tranches, ce sera une copie complète et vous pouvez éviter le problème ci-dessus.

a = [1, 2, 3]
b = a[:]
a[0] = 0 # a: [0, 2, 3], b: [1, 2, 3] -> a[0]Seulement changer
b[1] = 0 # a: [0, 2, 3], b: [1, 0, 3] -> b[1]Seulement changer

À propos, les éléments de string et tuple ne peuvent pas être modifiés.

b = 'foo'
b[0] = 'h' # TypeError: 'str' object does not support item assignment

a = (1, 2, 3)
a[0] = 0 # TypeError: 'tuple' object does not support item assignment

Une fonction qui prend une fonction comme argument

En python, vous pouvez définir "une fonction qui prend une fonction comme argument".

def higher(func, x, y):
    return func(x, y)

def add(a, b):
    return a + b

def sub(a, b):
    return a - b

print higher(add, 4, 3) # 7
print higher(sub, 4, 3) # 1

Au fait, l'utilisation de lambdavous évite d'avoir à définir des fonctions commeadd et `` `sub.

def higher(func, x, y):
    return fun(x, y)

print higher(lambda a, b: a + b, 4, 3) # 7
print higher(lambda a, b: a - b, 4, 3) # 1

Fonction qui renvoie une fonction

Définissez une fonction dans une fonction et définissez-la à renvoyer. L'exécution de la fonction externe `f``` renverra _f``` dans f```. Le _f '' retourné est une fonction, vous pouvez donc passer plus de valeurs pour l'exécuter. Par conséquent, la méthode d'exécution est la suivante: f (1) (2) ''.

def f(x):
    def _f(y):
        return x + y
    return _f

print f(1) # <function _f at 0x10e45b140>
print f(1)(2) # 3

Accorder des propriétés aux fonctions

Comme les fonctions en python sont des objets, vous pouvez ajouter librement des propriétés. Je ne savais pas comment m'en servir. S'il vous plaît, faites-moi savoir.

def foo():
    return '!!!'

foo.x = 1
foo.y = 2
foo.f = lambda x: x + 1

print foo() # !!!
print foo.x # 1
print foo.y # 2.000000
print foo.f(9) # 10

Restrictions d'accès

python n'a pas de mécanisme pour restreindre l'accès comme privé '' et protégé '' trouvé en C ++ et Java. Par conséquent, les restrictions d'accès sont appliquées de manière pseudo en ajoutant un trait de soulignement au début du nom de variable ou du nom de méthode. Dans le cas d'un trait de soulignement, il peut en fait être appelé, mais cela indique l'intention de l'implémenter en tant que méthode privée. Dans le cas de deux barres inférieures, elle ne peut pas être appelée avec le nom de méthode défini et l'accès est restreint. Strictement parlant, ce n'est pas que vous ne pouvez pas l'appeler, c'est juste que le nom de la méthode a été changé en _ (nom de la classe) __ (nom de la méthode) . Par conséquent, il peut être appelé sous la forme de _ (nom de classe) __ (nom de méthode) .

class Foo(object):
    def __init__(self, x):
        self.x = x
    def f(self, y):
        return self.x + y
    def _f(self, y):
        return self.x + y + 1
    def __f(self, y):
        return self.x + y + 2

foo = Foo(1)
print foo.f(1) # 2
print foo._f(1) # 3
print foo.__f(1) # AttributeError: 'Foo' object has no attribute '__f'
print foo._Foo__f(1) # 4

division de int

Le calcul de int $ \ div $ int en python 2.x n'est pas "l'entier avec les fractions tronquées" mais "l'entier maximum qui ne dépasse pas le résultat de la division". C'est pourquoi c'est comme ça.

print 1 / 2 # 0
print -1 / 2 # -1

Au fait, en python 3.x, le calcul de int $ \ div $ int est une fraction. Aussi, pour que python 3.x se comporte de la même manière que python 2.x, utilisez // '' ``.

//Est python 2.Il peut également être utilisé avec x.




#### **`Python3.x`**
```python

1 / 2 # 0.5
1 // 2 # 0
-1 / 2 # -0.5
-1 // 2 # -1

petite histoire engourdie

Tout le monde aime les engourdissements.

Transformation de tableau à une dimension

Si vous vérifiez le tableau à une dimension avec le nombre d'éléments $ n $ avec shape, ce sera `` `` (n,) `` `. Utilisez `` `` reshape pour transformer cela en un vecteur ligne (1, n) ou un vecteur colonne (n, 1) .

arr = numpy.arange(10) # array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
arr.shape # (10, )

arr.reshape((1, -1))
# array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

arr.reshape((-1, 1))
# array([[0],
#        [1],
#        [2],
#        [3],
#        [4],
#        [5],
#        [6],
#        [7],
#        [8],
#        [9]])

Inversion à l'aide de tranches

Il peut être retourné à l'aide de tranches. Les tranches sont gérées par (index de début): (index de fin): (intervalle). Les valeurs négatives se réfèrent à l'index de l'arrière.

[-1::-1]Vous pouvez découper de la fin au début avec.


 Le premier `` -1 '' peut être omis.

```py
X = numpy.arange(9).reshape((3, 3))
# array([[0, 1, 2],
#        [3, 4, 5],
#        [6, 7, 8]])

X[::-1, :]
# array([[6, 7, 8],
#        [3, 4, 5],
#        [0, 1, 2]])

X[:, ::-1]
# array([[2, 1, 0],
#        [5, 4, 3],
#        [8, 7, 6]])

vectorize

Dans les fonctions universelles de numpy, quatre règles de fonctionnement entre les ndarrays, les fonctions triangulaires de chaque élément et les fonctions qui prennent des valeurs logarithmiques sont définies. Utilisez `` vectorize '' pour définir une fonction qui applique votre propre fonction à chaque élément. Par exemple, transmettez une fonction qui renvoie le reste lorsqu'il est divisé par 10 pour vectoriser et passez ndarray à cette fonction.

X = numpy.arange(25).reshape((5, 5))
# array([[ 0,  1,  2,  3,  4],
#        [ 5,  6,  7,  8,  9],
#        [10, 11, 12, 13, 14],
#        [15, 16, 17, 18, 19],
#        [20, 21, 22, 23, 24]])

numpy.vectorize(lambda x: x % 10)(X)
# array([[0, 1, 2, 3, 4],
#        [5, 6, 7, 8, 9],
#        [0, 1, 2, 3, 4],
#        [5, 6, 7, 8, 9],
#        [0, 1, 2, 3, 4]])

en conclusion

J'ai essayé de résumer la petite histoire de python. S'il vous plaît laissez-moi savoir s'il y a d'autres choses comme ça. Si vous trouvez quelque chose, je l'ajouterai au besoin.

Information additionnelle

Corrigé en se référant aux commentaires de @ Tsutomu-KKE @ github, @shiracamus et @kochory. (04/06/2016)

Recommended Posts

petite histoire de python
Petite collection d'histoires App Service
[Petite histoire] Obtenez l'horodatage avec Python
python (3) Collection Dominer ORM
[Python] Trier les types de collection
[Petite histoire] Tester la génération d'images avec Python / OpenCV
[Petite histoire] En Python, i = i + 1 est légèrement plus rapide que i + = 1.
[Petite histoire] Synchronisez avec Python sans multi-threading (utilisation limitée)
Histoire lors de l'itération d'un tuple python
Histoire de trébucher avec le tableau Python
collection d'extraits de python avec cinema4d
Histoire addictive GAE + python + Django
Collection de traitement d'image en Python
Petite histoire: mécanisme d'aplatissement numpy
[Petite histoire] [Python] Remplacez les chaînes de caractères dans un tableau à deux dimensions par des nombres
L'histoire de Python et l'histoire de NaN
Opération de collecte de type Scala en Python
[Mémo] Petite histoire de pandas, stupide
Histoire d'erreur étrange et horrible de Python
Histoire d'approximation de puissance par Python
Générer une collection de première classe en Python
Collecte automatique des cours boursiers à l'aide de python
[Python] Trier les types de collection comme référence
L'histoire de la manipulation des variables globales Python
Programmation scientifique Collection Petit Tech en Python
Une histoire sur Python pop and append
ModuleNotFoundError en Python: aucun module nommé story
Conseils pour créer de petits outils avec python
L'histoire du traitement A du blackjack (python)