Je garde une liste mise à jour continuellement des tips'n tricks que Python nous réserve. Si vous avez d'autres cas intéressants, n'hésitez pas à poster un commentaire et je la mettrai à jour.


Vous pouvez sécifier un séparateur des milliers pour format :
>>> format(123456789, ",")
'123,456,789'
>>> format(123456789, "_")
'123_456_789'


Idem pour les f-strings :
>>> f"{123456789:,}"
'123,456,789'
>>> f"{123456789:_}"
'123_456_789'



pow peut prendre un 3ème argument pour calculer pow(x, y) % z :
x, y, z = 123456789, 2345678, 17

# Option 1: not efficient at all
res = pow(x, y) % z  # Does not end in more than 1 minute!

# Option 2: here we can talk!
res = pow(x, y, z)  # Instantly



re.sub peut être utilisée pour remplacer plusieurs caractères dans un texte (évitant ainsi d'avoir à enchaîner les appels à str.replace ou au plus coûteux str.translate (benchmark) :
from re import compile, sub

fname = "Ça, c'est un nom de fichier (2).odt"
pattern = compile(r'([/:"|*<>?\\])')
fname_sanitized = sub(pattern, "-", fname)



str.startswith et str.endswith peuvent prendre un tuple en paramètre :
text = 'azerty'

# Option 1: basic usage, not efficient
if text.startswith('a') or text.startswith('b') or text.startswith('c'):
    ...

# Option 2: best usage, efficient
if text.startswith(('a', 'b', 'c')):
    ...


Résumé du benchmark des 2 utilisations :
# text = 'azerty', the 1st condition is True
Option 1: 0.171 usec
Option 2: 0.174 usec

# text = 'czerty',  the last condition is True
Option 1: 0.498 usec
Option 2: 0.200 usec

# text = 'nzerty', all conditions are False
Option 1: 0.472 usec
Option 2: 0.186 usec



Vous pouvez supprimer les zéros ajoutés pour les différentes fonctions du module time qui prennent un format en entrée (valable pour datetime également) :
>>> import datetime, time
>>> today = datetime.datetime.now().timetuple()
>>> time.strftime('%Y-%m-%d', today)
'2017-12-06'
>>> time.strftime('%Y-%m-%-d', today)  # Check the '%-d'
'2017-12-6'



Historique

  • 2019-12-13 : Ajout de re.sub.
  • 2019-04-19 : Ajout de format.
  • 2017-12-06 : Ajout de time.
  • 2017-10-09 : Premier jet avec str et pow, mieux vaut publier maintenant que jamais ☺