Maison >développement back-end >Tutoriel Python >Quelles sont les astuces cachées de Python ?
Oui, vous avez bien lu, c'est "..."
En Python ... représente un objet nommé Ellipsis. Selon la description officielle, il s'agit d'une valeur spéciale qui peut généralement être utilisée comme espace réservé pour une fonction vide ou utilisée pour les opérations de découpage dans Numpy.
Par exemple :
def my_awesome_function(): ...
équivaut à :
def my_awesome_function(): Ellipsis
Bien sûr, vous pouvez également utiliser une passe ou une chaîne comme espace réservé :
def my_awesome_function(): pass
def my_awesome_function(): "An empty, but also awesome function"
Leur effet final est le même.
Parlons de... comment fonctionnent les objets dans Numpy. Créez un tableau matriciel 3x3x3, puis récupérez la deuxième colonne de toutes les matrices les plus internes :
>>> import numpy as np >>> array = np.arange(27).reshape(3, 3, 3) >>> array 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, 25, 26]]])
Afin d'obtenir la deuxième colonne de la matrice la plus interne Column, la méthode traditionnelle. peut ressembler à ceci :
>>> array[:, :, 1] array([[ 1, 4, 7], [10, 13, 16], [19, 22, 25]])
Si vous utilisez... un objet, cela ressemblera à ceci :
>>> array[..., 1] array([[ 1, 4, 7], [10, 13, 16], [19, 22, 25]])
Cependant, veuillez noter que... les objets ne sont disponibles que dans Numpy, pas dans les tableaux intégrés de Python.
Décompresser l'objet itératif est une fonctionnalité très pratique :
>>> a, *b, c = range(1, 11) >>> a 1 >>> c 10 >>> b [2, 3, 4, 5, 6, 7, 8, 9]
ou :
>>> a, b, c = range(3) >>> a 0 >>> b 1 >>> c 2
De même, au lieu d'écrire du code comme celui-ci :
>>> lst = [1] >>> a = lst[0] >>> a 1 >>> (a, ) = lst >>> a 1
Autant le mettre à jour de la même manière comme décompression de l'objet itératif. Opération d'affectation élégante :
>>> lst = [1] >>> [a] = lst >>> a 1
Bien que cela semble un peu stupide, à mon avis, c'est plus élégant que la façon d'écrire précédente.
Il existe diverses façons étranges d'étendre les tableaux, telles que :
>>> l = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] >>> flattened = [elem for sublist in l for elem in sublist] >>> flattened [1, 2, 3, 4, 5, 6, 7, 8, 9]
Si vous avez une certaine compréhension de la réduction et de lambda, il est recommandé d'utiliser une manière plus élégante :
>>> from functools import reduce >>> reduce(lambda x,y: x+y, l) [1, 2, 3, 4, 5, 6, 7, 8, 9]
combine réduire et lambda, Vous pouvez effectuer des opérations d'épissage sur chaque sous-tableau du tableau l.
Bien sûr, il existe une manière plus magique :
>>> sum(l, []) [1, 2, 3, 4, 5, 6, 7, 8, 9] >>> # 其实相当于 [] + [1, 2, 3] + [4, 5, 6] + [7, 8, 9]
Oui, en effectuant l'opération de somme sur le tableau bidimensionnel, chaque élément du tableau bidimensionnel peut être assemblé par "addition".
De la même manière, si vous effectuez une opération de somme sur un tableau à trois dimensions, il peut être transformé en un tableau à deux dimensions. À ce stade, si vous effectuez une opération de somme sur un tableau à deux dimensions, cela peut. être développé en un tableau unidimensionnel.
Bien que cette technique soit excellente, je ne la recommande pas car la lisibilité est très mauvaise.
Chaque fois que vous exécutez une expression dans l'interpréteur Python, IPython ou la console Django, Python liera la valeur de sortie dans la variable _ :
>>> nums = [1, 3, 7] >>> sum(nums) 11 >>> _ 11 >>>
Puisqu'il s'agit d'une variable, vous pouvez la remplacer à à tout moment, ou utilisez-le comme une variable normale :
>>> 9 + _ 20 >>> a = _ >>> a 20
Beaucoup de gens ne savent pas que else peut être utilisé dans de nombreux endroits. En plus du if else typique, nous pouvons également l'utiliser. dans les boucles Il est utilisé dans la gestion des exceptions.
Si vous devez déterminer si une certaine logique est traitée dans la boucle, vous faites généralement ceci :
found = False a = 0 while a < 10: if a == 12: found = True a += 1 if not found: print("a was never found")
Si else est introduit, nous pouvons utiliser une variable de moins :
a = 0 while a < 10: if a == 12: break a += 1 else: print("a was never found")
Nous pouvons utiliser essayez.. sauf ... utilisez else pour écrire la logique lorsqu'une exception n'est pas interceptée :
In [13]: try: ...: {}['lala'] ...: except KeyError: ...: print("Key is missing") ...: else: ...: print("Else here") ...: Key is missing
De cette façon, si le programme n'a pas d'exception, il prendra la branche else :
In [14]: try: ...: {'lala': 'bla'}['lala'] ...: except KeyError: ...: print("Key is missing") ...: else: ...: print("Else here") ...: Else here
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!